Dev ›
Подсистема "Инструменты разработчика" v7.13.2 ›
#218
26.09.08 11:58
(217) Отвязаться от метаданных не получится, т.к. ошибка возникает при использовании виртуальной таблицы, когда в условиях виртуальной таблицы применяется временная таблица.
В примере должна быть виртуальная таблица любого регистра.
RegExp не знаю, поэтому с шаблоном не стал эксперементировать.
Для себя проблему решил переписав функцию РазмаскироватьВременныеТаблицы средствами 1С.
//////////////
Функция РазмаскироватьВременныеТаблицы(ТекстЗапроса, МассивВременныхТаблиц) Экспорт
Для Каждого ПодмененнаяВременнаяТаблица Из МассивВременныхТаблиц Цикл
ПозицияИмени = Найти(ТекстЗапроса,""""+ПодмененнаяВременнаяТаблица+"""");
Если ПозицияИмени <> 0 Тогда
//размаскируем
ДлинаИсходнойСтроки = СтрДлина(ТекстЗапроса);
//Найдем открывающую скобку, чтобы получить начало будущей строки.
СтрокаДляПоискаОткрывающейСкобки = Лев(ТекстЗапроса,ПозицияИмени-1);
ДлинаСтрокиОткрывающейСкобки = СтрДлина(СтрокаДляПоискаОткрывающейСкобки);
КоличествоЗакрывающихСкобок = 0;
ПозицияЗакрывающейСкобки = 0;
Для х=0 По ДлинаСтрокиОткрывающейСкобки Цикл
АнализируемыйСимвол = Сред(СтрокаДляПоискаОткрывающейСкобки,ДлинаСтрокиОткрывающейСкобки-х,1);
Если АнализируемыйСимвол = ")" Тогда
КоличествоЗакрывающихСкобок=КоличествоЗакрывающихСкобок+1;
ИначеЕсли АнализируемыйСимвол = "(" Тогда
Если КоличествоЗакрывающихСкобок=0 Тогда
ПозицияЗакрывающейСкобки = ДлинаСтрокиОткрывающейСкобки-х;
Прервать;
Иначе
КоличествоЗакрывающихСкобок = КоличествоЗакрывающихСкобок-1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НачалоБудущейСтроки = Лев(ТекстЗапроса,ПозицияЗакрывающейСкобки-1);
//Найдем следующую закрывающую скобку, чтобы получить конец будущей строки
КонецСтрокиДляПоискаЗакрывающейСкобки = Прав(ТекстЗапроса,ДлинаИсходнойСтроки-ПозицияИмени+1);
ПозицияЗакрывающейСкобки = Найти(КонецСтрокиДляПоискаЗакрывающейСкобки,")");
ПозицияЗакрывающейСкобки = ПозицияИмени+ПозицияЗакрывающейСкобки;
ДлиннаКонцаБудущейСтроки = ДлинаИсходнойСтроки - ПозицияЗакрывающейСкобки+1;
КонецБудущейСтроки = Прав(ТекстЗапроса,ДлиннаКонцаБудущейСтроки);
//Собираем строку
ТекстЗапроса = НачалоБудущейСтроки+ПодмененнаяВременнаяТаблица+КонецБудущейСтроки;
КонецЕсли;
КонецЦикла;
Возврат ТекстЗапроса;
КонецФункции // РазмаскироватьВременныеТаблицы()
//////////////