МАКСИМУМ(выразить(Номенклатура.Код как число(6,2))) - к сожалению вот так преобразовать строку в число не получится!
На помощь придут вот такие функции. Нашел их тут.
Функция ТекстЗапросаИзЧислаВСтроку(пИмяПоля, пДлинаЦел, пДлинаДробь, пЛидирующийСимвол="") лЗапрос=Новый Запрос("ВЫБРАТЬ ВЫРАЗИТЬ(0.5 КАК ЧИСЛО (15, 0)) КАК Проверка"); лВыборка=лЗапрос.Выполнить().Выбрать(); лВыборка.Следующий(); лЗапросОкругляетПоАрифметическимПравилам=лВыборка.Проверка=1; лТекст="ВЫБОР КОГДА "+пИмяПоля+"<0 Тогда ""-"" ИНАЧЕ """" КОНЕЦ "+Символы.ПС; лИмяПоляАбс=" ВЫБОР КОГДА "+пИмяПоля+"<0 ТОГДА -"+пИмяПоля+" ИНАЧЕ "+пИмяПоля+" КОНЕЦ "; лПараметр=Pow(10, пДлинаЦел-1); Для лИнд=1 По пДлинаЦел+пДлинаДробь цикл лТекст=лТекст+?(лИнд=пДлинаЦел+1, "+"".""+", "+"); лТекст=лТекст+" ВЫБОР "+Символы.ПС+ ?(лИнд<пДлинаЦел, " КОГДА "+лИмяПоляАбс+" < "+Формат(лПараметр, "ЧРД=.; ЧГ=")+" ТОГДА """+пЛидирующийСимвол+""" "+Символы.ПС, ""); Для лЦифра=0 По 9 Цикл лТекст=лТекст+" КОГДА "+лИмяПоляАбс+"-"+Формат(лПараметр*10, "ЧРД=.; ЧГ=")+"*ВЫРАЗИТЬ(("+лИмяПоляАбс+?(лЗапросОкругляетПоАрифметическимПравилам, "-"+Формат(лПараметр*5, "ЧРД=.; ЧГ="), "")+")/"+Формат(лПараметр*10, "ЧРД=.; ЧГ=")+" КАК ЧИСЛО(15, 0))"+" >= "+Формат((9-лЦифра)*лПараметр, "ЧН=0; ЧРД=.; ЧГ=")+" ТОГДА """+Формат(9-лЦифра, "ЧН=0; ЧРД=.; ЧГ=")+""" "+Символы.ПС; КонецЦикла; лТекст=лТекст+" ИНАЧЕ ""0"""+Символы.ПС+" Конец "+Символы.ПС; лПараметр=лПараметр/10; КонецЦикла; Сообщить(лТекст); Возврат лТекст; КонецФункции Функция ТекстЗапросаИзСтрокиВЧисло(пИмяПоля, пДлинаСтроки, пСимволРазделителя=".") лТекст="ВЫБОР "; Для лДлинаЦелойЧасти=0 По пДлинаСтроки Цикл Если лДлинаЦелойЧасти=пДлинаСтроки Тогда лТекст=лТекст+"ИНАЧЕ"+Символы.ПС; Иначе лТекст=лТекст+"КОГДА ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""+пСимволРазделителя+""" ИЛИ ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""" ТОГДА "+Символы.ПС; КонецЕсли; Если лДлинаЦелойЧасти=0 Тогда лТекст=лТекст+" 0"+Символы.ПС; КонецЕсли; Для лИнд=1 По лДлинаЦелойЧасти Цикл лТекст=лТекст+" ВЫБОР "+Символы.ПС; Для лЦифра=0 По 9 Цикл лТекст=лТекст+" КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС; КонецЦикла; лТекст=лТекст+" ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "*"+Формат(Pow(10, лДлинаЦелойЧасти-лИнд), "ЧРД=.; ЧГ=0")+"+")+Символы.ПС; КонецЦикла; Для лИнд=лДлинаЦелойЧасти+2 По пДлинаСтроки Цикл лТекст=лТекст+"+ ВЫБОР"; Для лЦифра=0 По 9 Цикл лТекст=лТекст+" КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС; КонецЦикла; лТекст=лТекст+" ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "/"+Формат(Pow(10, лИнд-лДлинаЦелойЧасти-1), "ЧРД=.; ЧГ=0"))+Символы.ПС; КонецЦикла; КонецЦикла; лТекст=лТекст+"КОНЕЦ"; Возврат лТекст; КонецФункции
Использовать их так:
Процедура КнопкаВыполнить1(Кнопка) лЗапрос=Новый Запрос; лЗапрос.Текст="ВЫБРАТЬ ""Полученная строка : ""+"+ТекстЗапросаИзЧислаВСтроку(12, 2, 0)+" КАК Строка"; лТзЗапроса=лЗапрос.Выполнить().Выгрузить(); лТзЗапроса.ВыбратьСтроку(); КонецПроцедуры Процедура КнопкаВыполнить2(Кнопка) лЗапрос=Новый Запрос; лЗапрос.УстановитьПараметр("а", "1333.3"); лЗапрос.Текст="ВЫБРАТЬ "+ТекстЗапросаИзСтрокиВЧисло("&а", 6)+" КАК Число"; Сообщить(лЗапрос.Текст); лТзЗапроса=лЗапрос.Выполнить().Выгрузить(); лТзЗапроса.ВыбратьСтроку(); КонецПроцедуры
Мой пример.
Получаем максимальный числовой код для товара из спр Номенклатура, где код - строка:
&НаСервере функция получитьИДТовараНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ("+ТекстЗапросаИзСтрокиВЧисло("Номенклатура.Код", 6)+") КАК Код |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ЛОЖЬ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл возврат (формат(ВыборкаДетальныеЗаписи.код+1,"ЧРГ=; ЧГ=0")); КонецЦикла; КонецФункции