Имя: Пароль:
1C
1С v8
СтрНайти, СтрЗаменить многострочные фрагменты
,
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
У меня нормально заменяются многострочные части типового запроса, делал так много раз. Кстати если открыть в конструкторе, то будет однозначно что там стоит пробелы или табуляция