|
СтрНайти, СтрЗаменить многострочные фрагменты | ☑ | ||
---|---|---|---|---|
0
Dmitriy_
Kolesnikov 02.10.18
✎
12:11
|
Задача - подменить кусок типового запроса. Он многострочный. Пробую по-разному - никак не получается: СтрНайти, СтрЗаменить не находит фрагментов.
СтрокаНачис = "СУММА(ВЫБОР" + Символы.ПС + " КОГДА СведенияОДоходах.ЗастрахованФСС" + Символы.ПС + " ТОГДА СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих" + Символы.ПС + " КОГДА СведенияОДоходах.ЗастрахованФССкакИностранец" + Символы.ПС + " ТОГДА СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих" + Символы.ПС + " ИНАЧЕ 0" + Символы.ПС + " КОНЕЦ) КАК Начислено,"; Запрос.Текст = СтрЗаменить(Запрос.Текст, СтрокаНачис, "СУММА(СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих) КАК Начислено,"); или так: Запрос.Текст = СтрЗаменить(Запрос.Текст, "СУММА(ВЫБОР | КОГДА СведенияОДоходах.ЗастрахованФСС | ТОГДА СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих | КОГДА СведенияОДоходах.ЗастрахованФССкакИностранец | ТОГДА СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих | ИНАЧЕ 0 | КОНЕЦ) КАК НеОблагается,", "СУММА(СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих) КАК НеОблагается,"); Результат отрицательный. Как правильно? |
|||
1
singlych
02.10.18
✎
12:17
|
Набор пробелов и табуляций между переносом строки и текстом должен совпадать.
|
|||
2
d4rkmesa
02.10.18
✎
12:19
|
(0) Если сложности с многострочным фрагментом(который может измениться), может тогда переложите запрос в схему запроса и замените выражение в Начислено на ваше?
|
|||
3
НЕА123
02.10.18
✎
12:19
|
не мотайте ерундой (с)
#ТекстЗаменяемый# в тексте запроса. |
|||
4
d4rkmesa
02.10.18
✎
12:20
|
(3) >>Задача - подменить кусок типового запроса.
|
|||
5
НЕА123
02.10.18
✎
12:23
|
(4)
тогда (1) или схемазапроса |
|||
6
Dmitriy_
Kolesnikov 02.10.18
✎
12:32
|
(5) благодарю за направление мысли!
(3) если бы я хотел поменять текст запроса, сделал бы давно, но тогда возникнут сложности при обновлении типовой конфигурации. Я же меняю регламентированный отчет. |
|||
7
Salimbek
02.10.18
✎
12:42
|
(6) Да нет никаких проблем. Перехватываешь запрос в отладчике и выделяешь именно тот кусок, который тебе нужен. И его засовываешь в СтрЗаменить. А так - кто его знает - пробелами там отступы сделаны, или табуляцией, или часть пробелами, а часть Таб-ом.
|
|||
8
kittystark
02.10.18
✎
20:34
|
Function RegExpReplace( str, pattern, replacement, force_empty_str = 0 ) export
//если последний параметр не ноль, тогда при отсутствии совпадения по шаблону - будет вернута пустая строка //если же последний параметр опущен, то при отсутствии совпадения по шаблону - будет вернута исходная строка Попытка RegExp = new COMObject("vbscript.regexp"); RegExp.IgnoreCase = true; RegExp.MultiLine = true; RegExp.Global = true; RegExp.Pattern = pattern; if force_empty_str = 0 then return RegExp.Replace(str,replacement); else if RegExp.Test(str) then return RegExp.Replace(str,replacement); else return ""; endIf; endIf; Исключение return ОписаниеОшибки(); КонецПопытки; EndFunction СвойТекст = "СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих"; Запрос.Текст = RegExpReplace(Запрос.Текст, "(сумма\()(?:.|\r|\n)+(\))", "$1" + свойТекст + "$2"; |
|||
9
kittystark
02.10.18
✎
20:40
|
2-ой параметр лучше поменять на
"(сумма\()(?:.|\r|\n)+(\) КАК НеОблагается)" |
|||
10
kittystark
02.10.18
✎
20:45
|
или даже так
"(сумма\()(?:[^(]|\r|\n)+(\) как необл)" |
|||
11
kittystark
02.10.18
✎
20:48
|
блин вместо "как необл"
нужно "как НеОблагается" |
|||
12
Franchiser
гуру
02.10.18
✎
22:09
|
У меня нормально заменяются многострочные части типового запроса, делал так много раз. Кстати если открыть в конструкторе, то будет однозначно что там стоит пробелы или табуляция
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |