Имя: Пароль:
1C
1С v8
Есть ли в 1С макроподстановка
0 Azgerd
 
20.02.13
15:48
Есть переменная: ИмяКлиента = "ООО Рога и копыта"
Есть строка: Строка = "ттттт [ИмяКлиента] тттттт"
Как можно в Строке изменить подстроку "ИмяКлиента" на значение переменной ИмяКлиента, чтобы вместо "ттттт [ИмяКлиента] тттттт" получилось "ттттт ООО Рога и копыта тттттт".
1 SerMaxim
 
20.02.13
15:48
нет. плохая система... и главное недокументированная...
2 artems
 
20.02.13
15:50
СтрЗаменить (StrReplace)
Синтаксис:

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Исходная строка.
<ПодстрокаПоиска> (обязательный)

Тип: Строка.
Искомая подстрока.
<ПодстрокаЗамены> (обязательный)

Тип: Строка.
Подстрока, на которую будет заменена подстрока поиска.
Возвращаемое значение:

Тип: Строка.
Строка, полученная в результате замены.
Описание:

Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
3 fmrlex
 
20.02.13
15:51
(0) Ты на ассемблере до этого херачил? ))
4 artems
 
20.02.13
15:52
(0) За год СП можно было бы и изучить :)
5 Azgerd
 
20.02.13
15:56
Как заменить подстроку я знаю. Я сначала не догнал как из строки "ИмяКлиента" получить значение переменной ИмяКлиента,
вопрос решён: Вычислить("ИмяКлиента") = "ООО Рога и копыта".
Спасибо.
6 dmpl
 
20.02.13
15:58
(5) А зачем ты создавал строку "ИмяКлиента"?
7 shamannk
 
20.02.13
15:58
Строка = "ттттт"+ ИмяКлиента]+ "тттттт";
Так?
8 shamannk
 
20.02.13
15:59
(7) + Без скопки ]
9 badboychik
 
20.02.13
16:02
если прикрутить регулярные выражения то можно воопще парсить любые строки в которых встречаются объявленные ранее переменные
10 badboychik
 
20.02.13
16:04
в 7.7 была функция Шаблон(), в восьмерке такой нету, печалька ((
11 Azgerd
 
20.02.13
16:05
[ИмяКлиента] в скобках я создал, чтобы относительно них из текста вырезать переменные. Например "Договор с [ИмяКлиента] от лица [ДолжностьРуководителя]" и т.д.
12 Azgerd
 
20.02.13
16:06
badboychik - а что значит "прикрутить регулярные выражения"?
13 badboychik
 
20.02.13
16:10
ну вот есть у тебя строка
Ст = "Договор с #ИмяКлиента от лица #ДолжностьРуководителя"
ты говоришь (языком 1С) - все выражения по шаблону "#(\w+)" заменить на "Вычислить(Х.Replace(Ст,"$1"))"
14 pumbaEO
 
20.02.13
16:10
ОбщийМодуль.СтроковыеФункцииКлиентСервер



// Подставляет параметры в строку. Максимально возможное число параметров - 9.
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
//
// Параметры:
//  СтрокаПодстановки  – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра");
//  Параметр<n>        - Строка - подставляемый параметр.
//
// Возвращаемое значение:
//  Строка   – текстовая строка с подставленными параметрами.
//
// Пример:
//  ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк".
//
Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки,
   Знач Параметр1,    Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
   Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
   Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
   
   Если СтрокаПодстановки = Неопределено ИЛИ СтрДлина(СтрокаПодстановки) = 0 Тогда
       Возврат "";
   КонецЕсли;
   
   Результат = "";
   НачПозиция = 1;
   Позиция = 1;
   Пока Позиция <= СтрДлина(СтрокаПодстановки) Цикл
       СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1);
       Если СимволСтроки <> "%" Тогда
           Позиция = Позиция + 1;
           Продолжить;
       КонецЕсли;
       Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, Позиция - НачПозиция);
       Позиция = Позиция + 1;
       СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1);
       
       Если СимволСтроки = "%" Тогда
           Позиция = Позиция + 1;
           НачПозиция = Позиция;
           Результат = Результат + "%";
           Продолжить;
       КонецЕсли;
       
       Попытка
           НомерПараметра = Число(СимволСтроки);
       Исключение
           ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + СимволСтроки);
       КонецПопытки;
       
       Если СимволСтроки = "1" Тогда
           ЗначениеПараметра = Параметр1;
       ИначеЕсли СимволСтроки = "2" Тогда
           ЗначениеПараметра = Параметр2;
       ИначеЕсли СимволСтроки = "3" Тогда
           ЗначениеПараметра = Параметр3;
       ИначеЕсли СимволСтроки = "4" Тогда
           ЗначениеПараметра = Параметр4;
       ИначеЕсли СимволСтроки = "5" Тогда
           ЗначениеПараметра = Параметр5;
       ИначеЕсли СимволСтроки = "6" Тогда
           ЗначениеПараметра = Параметр6;
       ИначеЕсли СимволСтроки = "7" Тогда
           ЗначениеПараметра = Параметр7;
       ИначеЕсли СимволСтроки = "8" Тогда
           ЗначениеПараметра = Параметр8;
       ИначеЕсли СимволСтроки = "9" Тогда
           ЗначениеПараметра = Параметр9;
       Иначе
           ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + ЗначениеПараметра);
       КонецЕсли;
       Если ЗначениеПараметра = Неопределено Тогда
           ЗначениеПараметра = "";
       Иначе
           ЗначениеПараметра = Строка(ЗначениеПараметра);
       КонецЕсли;
       Результат = Результат + ЗначениеПараметра;
       Позиция = Позиция + 1;
       НачПозиция = Позиция;
   
   КонецЦикла;
   
   Если (НачПозиция <= СтрДлина(СтрокаПодстановки)) Тогда
       Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, СтрДлина(СтрокаПодстановки) - НачПозиция + 1);
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции
15 badboychik
 
20.02.13
16:11
и в Ст уже лежит результат
16 Serg_1960
 
20.02.13
16:17
17 dmpl
 
20.02.13
16:21
(11) И где это потом используется?
18 badboychik
 
20.02.13
16:33
(13) эх не сработает так, надо сначала найти все элементы реглярным выражением а потом в цикле заменять название на значение
19 badboychik
 
20.02.13
17:02
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "@([А-я\d]+)";
RegExp.Global = Истина;
Имя="Вася";
Фамилия ="Иванов";
Представление = "Меня зовут @Фамилия Имя";
Совпадения = RegExp.Execute(Представление);

Для Эл=0 по Совпадения.Count()-1 Цикл
   Шаблон = Совпадения.Item(Эл).Value;
   Переменная = Совпадения.Item(Эл).Submatches().Item(0);
   Представление = СтрЗаменить(Представление,Шаблон,Вычислить(Переменная));
Конеццикла;
Сообщить(Представление);