Пока решил так:
В классе ПолеНастройки.ert в методе СформироватьПолеЗапроса() добавил такое изменение:
Если МетаРеквизит.Периодический = 1 Тогда
//Для корректного отбора по периодическим, указываем, что это строка, но оставляем длину и точность, если значение реквизита = Число, чтобы корректно сравнить. См. ЭлементОтбора.ert ПолучитьТекстЗапроса()
ВекторПоляЗапроса.ТипВид = "Строка";
ВекторПоляЗапроса.Тип = "Строка";
ВекторПоляЗапроса.Вид = "";
ВекторПоляЗапроса.Длина = МетаРеквизит.Длина;
ВекторПоляЗапроса.Точность = МетаРеквизит.Точность;
Иначе
ВекторПоляЗапроса.ТипВид = МетаРеквизит.Тип + ?(ПустоеЗначение(МетаРеквизит.Вид) = 1,"",".") + МетаРеквизит.Вид;
ВекторПоляЗапроса.Тип = МетаРеквизит.Тип;
ВекторПоляЗапроса.Вид = МетаРеквизит.Вид;
ВекторПоляЗапроса.Длина = МетаРеквизит.Длина;
ВекторПоляЗапроса.Точность = МетаРеквизит.Точность;
КонецЕсли;
А в классе ЭлементОтбора.ert
чуток изменил метод ПолучитьТекстЗапроса().
После ВрегТип = Врег(ОписаниеТипов.Тип); вставил:
Если ВрегТип = "СТРОКА" Тогда
Если ТипЗначенияСтр(ЗначениеСравнения)="Число" Тогда //Приводим число в вид, корректный для сравнения со строкок (в частности для Периодических значений, т.к. они являются строками, не смотря на тип реквизита)
//См. ПолеНастройки.ert СформироватьПолеЗапроса(), там идет типизация
ДлЧисла =ОписаниеТипов.Длина;
ТочностьЧисла =ОписаниеТипов.Точность;
ЗначениеСравнения=""+ЗначениеСравнения;
СтрПробелов=" ";
СтрПробелов =Лев(СтрПробелов,ДлЧисла-1-ТочностьЧисла);
ДлЦелойЧасти =СтрДлина(""+Цел(ЗначениеСравнения));
СтрПробелов =Лев(СтрПробелов,СтрДлина(СтрПробелов)-ДлЦелойЧасти);
СтрПробелов =СтрЗаменить(СтрПробелов," ","_Пр_");
ЗначениеСравнения=СтрПробелов+ЗначениеСравнения;
ВрегВидСравнения="СОДЕРЖИТ";
КонецЕсли;
КонецЕсли;
и далее:
ИначеЕсли (ВрегВидСравнения = "СОДЕРЖИТ") ИЛИ (ВрегВидСравнения = "НЕСОДЕРЖИТ") Тогда
СтрокаУсловия = ?(ВрегВидСравнения = "СОДЕРЖИТ","like","not like");
ЗначениеСравнения = СокрЛП(ЗначениеСравнения);
ЗначениеСравнения = СтрЗаменить(ЗначениеСравнения,"_Пр_"," ");