Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

СтрНайти, СтрЗаменить многострочные фрагменты

СтрНайти, СтрЗаменить многострочные фрагменты
Я
   Dmitriy_ Kolesnikov
 
02.10.18 - 12:11
Задача - подменить кусок типового запроса. Он многострочный. Пробую по-разному - никак не получается: СтрНайти, СтрЗаменить не находит фрагментов.

        СтрокаНачис = "СУММА(ВЫБОР" + Символы.ПС +
        "            КОГДА СведенияОДоходах.ЗастрахованФСС" + Символы.ПС +
        "                ТОГДА СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих" + Символы.ПС +
        "            КОГДА СведенияОДоходах.ЗастрахованФССкакИностранец" + Символы.ПС +
        "                ТОГДА СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих" + Символы.ПС +
        "            ИНАЧЕ 0" + Символы.ПС +
        "        КОНЕЦ) КАК Начислено,";
        Запрос.Текст = СтрЗаменить(Запрос.Текст, СтрокаНачис,
        "СУММА(СведенияОДоходах.ОбъектОбложенияВзносамиСтатья7 - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих) КАК Начислено,");


или так:


        Запрос.Текст = СтрЗаменить(Запрос.Текст,
        "СУММА(ВЫБОР
        |            КОГДА СведенияОДоходах.ЗастрахованФСС
        |                ТОГДА СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих
        |            КОГДА СведенияОДоходах.ЗастрахованФССкакИностранец
        |                ТОГДА СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК НеОблагается,",
        "СУММА(СведенияОДоходах.НеОблагаетсяФСС - СведенияОДоходах.ДенежноеДовольствиеВоеннослужащих) КАК НеОблагается,");



Результат отрицательный.
Как правильно?
 
 
   singlych
 
1 - 02.10.18 - 12:17
Набор пробелов и табуляций между переносом строки и текстом должен совпадать.
   d4rkmesa
 
2 - 02.10.18 - 12:19
(0) Если сложности с многострочным фрагментом(который может измениться), может тогда переложите запрос в схему запроса и замените выражение в Начислено на ваше?
   НЕА123
 
3 - 02.10.18 - 12:19
не мотайте ерундой (с)

#ТекстЗаменяемый#  в тексте запроса.
   d4rkmesa
 
4 - 02.10.18 - 12:20
(3) >>Задача - подменить кусок типового запроса.
   НЕА123
 
5 - 02.10.18 - 12:23
(4)
тогда (1) или схемазапроса
   Dmitriy_ Kolesnikov
 
6 - 02.10.18 - 12:32
(5) благодарю за направление мысли!
(3) если бы я хотел поменять текст запроса, сделал бы давно, но тогда возникнут сложности при обновлении типовой конфигурации. Я же меняю регламентированный отчет.
   Salimbek
 
7 - 02.10.18 - 12:42
(6) Да нет никаких проблем. Перехватываешь запрос в отладчике и выделяешь именно тот кусок, который тебе нужен. И его засовываешь в СтрЗаменить. А так - кто его знает - пробелами там отступы сделаны, или табуляцией, или часть пробелами, а часть Таб-ом.
   kittystark
 
8 - 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";
   kittystark
 
9 - 02.10.18 - 20:40
2-ой параметр лучше поменять на 
"(сумма\()(?:.|\r|\n)+(\) КАК НеОблагается)"
   kittystark
 
10 - 02.10.18 - 20:45
или даже так
"(сумма\()(?:[^(]|\r|\n)+(\) как необл)"
 
 Рекламное место пустует
   kittystark
 
11 - 02.10.18 - 20:48
блин вместо "как необл"
нужно "как НеОблагается"
   Franchiser
 
12 - 02.10.18 - 22:09
У меня нормально заменяются многострочные части типового запроса, делал так много раз. Кстати если открыть в конструкторе, то будет однозначно что там стоит пробелы или табуляция

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует