|
СтрЗаменить | ☑ | ||
|---|---|---|---|---|
|
0
Лисёнко
01.03.10
✎
15:42
|
Здравствуйте, подскажите пожалуйста, есть ли в язуке запросов аналог команды СтрЗаменить?
|
|||
|
1
skunk
01.03.10
✎
15:43
|
(0)зачем?
|
|||
|
2
Лисёнко
01.03.10
✎
15:44
|
(1) необходимо для решения задачи.
|
|||
|
3
Sadovnikov
01.03.10
✎
15:44
|
(2) Какой?
|
|||
|
4
skunk
01.03.10
✎
15:44
|
(2)скорее всего задачу как-то не правильно формулируешь
|
|||
|
5
shuhard
01.03.10
✎
15:44
|
(2) это не ответ, это отмазка
|
|||
|
6
Живой Ископаемый
01.03.10
✎
15:46
|
В Конфигураторе - клавиша Ф1, и потом "Содержание" и потом вот такая кратинка:
https://docs.google.com/leaf?id=0B-jxtBB8IRaZODBiNmQ1ZGUtNjZhNy00ZGM4LTgxNjAtOWE5OTA5OTEwZTk1&hl=en Там все функции которые доступны в языке запросов |
|||
|
7
Maxus43
01.03.10
✎
15:46
|
(0) Нет
(2) Решать по другому |
|||
|
8
Лисёнко
01.03.10
✎
15:49
|
(7) спасибо. а это точно?
|
|||
|
9
butterbean
01.03.10
✎
15:50
|
(8) в мемориз!
|
|||
|
10
Живой Ископаемый
01.03.10
✎
15:50
|
2(8) Посмотрите (6) Если не найдете - значит точно.. Если найдете - значит не точно
|
|||
|
11
Artful Den
01.03.10
✎
15:52
|
(8) а попробовать эту функцию использовать религия не позволяет?
|
|||
|
12
Киборг
01.03.10
✎
15:59
|
(8) возможно и не все
описание логического оператора "ССЫЛКА <ИмяТаблицы>" я там не нашел |
|||
|
13
Киборг
01.03.10
✎
16:02
|
а, есть, в разделе "Логические выражения в языке запросов"
|
|||
|
14
i-rek
01.03.10
✎
16:03
|
Может можно как-то скомбинировать из нескольких ПОДСТРОКА() и подзапросов с ПОДОБНО
|
|||
|
15
Живой Ископаемый
01.03.10
✎
16:04
|
2(12) потому что это не функция, а логический оператор
|
|||
|
16
Defender aka LINN
01.03.10
✎
16:05
|
(12) К офтальмологу!
|
|||
|
17
Zlodey1С
01.03.10
✎
16:08
|
Осмелюсь первым у автора спросить. Какая задача стоит? Что хочете получить?
|
|||
|
18
Киборг
01.03.10
✎
16:08
|
(16) кстати, да, раздел всем хорош, но найти в нем что-то нужное - это целый квест :)
(15) вот-вот :) |
|||
|
19
Живой Ископаемый
01.03.10
✎
16:08
|
2(18) Не, рано... я думаю где-то после 30-й реплики ответит...
|
|||
|
20
i-rek
01.03.10
✎
16:10
|
предлагаю тащить не повторяющиеся строки на клиента, там делать таблицу замен, сувать её во временную таблицу и через левое соединение подпихивать :)
|
|||
|
21
Киборг
01.03.10
✎
16:21
|
Еще, кстати, все ключевые слова можно найти, почему-то, только в разделе "Двуязычное представление ключевых слов" %)
А релевантную выборку в справке все-таки можно получить, используя в поиске выражение "ключевое_слово язык запросов" |
|||
|
22
fishman
01.03.10
✎
16:31
|
вот один пример задачи:
запрос вытаскивает номера телефонов получаем значение "5432122 +79991111111" "Пупкин" "8 (999) 222 22 22" "Непупкин" "444 4444" "Тапкин" как пользуясь механизмом запросов, привести к такому виду "88125432122" "Пупкин" "89992222222" "Непупкин" "88124444444" "Тапкин" Пользуясь языком 1С у нас в арсенале функции СтрЗаменить(), СтрДлина(), Найти() и т.д., а вот как с помощью запроса привести к данному виду непонятно. |
|||
|
23
Киборг
01.03.10
✎
16:35
|
(22) Зная маску - можно, а не зная - у меня бы ни за что не получилось из "5432122 +79991111111" сделать "88125432122". Так шта...
|
|||
|
24
fishman
01.03.10
✎
16:44
|
(23) Немного непонятно что вы имеете ввиду. Если у вас не получится, это не значит что ни у кого не получится, у меня есть решение, если вам интересно можно обсудить.
автор спрашивает есть ли аналог СтрЗаменить(), в моем примере можно применить к замене +7 на 8 СтрЗаменить(Строка, "+7", 8), в запросе к примеру не понятно какой функцией или вообще есть ли возможность сделать замену. |
|||
|
25
Maxus43
01.03.10
✎
16:44
|
(22) почему именно запросом надо? пример тогда такого ограничения в студию
|
|||
|
26
Киборг
01.03.10
✎
16:47
|
(24) скорее всего, все таки, ни у кого не получится, если не знать маску номера (=правила формирования).
|
|||
|
27
Киборг
01.03.10
✎
16:49
|
+(26) конкретно в этом примере:
из "5432122 +79991111111" сделать "88125432122" |
|||
|
28
fishman
01.03.10
✎
16:52
|
(25) Для построения отчета используется ОсновнаяСхемаКомпоновкиДанных, где создан Набор данных-Запрос, запрос формирует первый вариант из моего примера, в настройках выводятся детальные записи. если бы можно было применить при формировании отчета свою функцию из общих процедур, то было бы все отлично, так как есть функция которая делает преобразования номеров. Если такое примение возможно подскажите.
|
|||
|
29
fishman
01.03.10
✎
17:00
|
(27)
Телефон = "5432122 +79991111111"; Цифры="0123456789"; //Делаем замену +7 на 8 чтобы в дальнейшем у нас все цифры были без //вспомогательных сиволов Вр = СтрЗаменить(Телефон,"+7","8"); //Убираем все лишнее из строки Ц=1;Т=""; Пока Ц<=СтрДлина(Вр) Цикл Если Найти(Цифры,Сред(Вр,Ц,1))>0 Тогда Т = Т + Сред(Вр,Ц,1); КонецЕсли; Ц = Ц + 1 КонецЦикла; //Получаем такую фигню "543212289991111111" //теперь по количеству символов можем определить какие номера у нас в строке Если СтрДлина(Т)=17 тогда // Городской и федеральный Тмп = Сред(Т,1,3); Если Тмп = "812" или Тмп = "911" или Тмп = "921" или Тмп = "901" или Тмп = "904" или Тмп = "905" или Тмп = "951" или Тмп = "909" тогда ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,10)); ТелефонГородской = фоДобавитьПрефикс(Сред(Т,11,СтрДлина(Т))); иначе ТелефонГородской = фоДобавитьПрефикс(Лев(Т,7)); ТелефонМобильный = фоДобавитьПрефикс(Сред(Т,8,СтрДлина(Т))); КонецЕсли; КонецЕсли; Вырезали из строки городской номер и мобильный, теперь городской номер к виду 88125432122 несложно. если вам интересно и будет полезным выкладываю более полную версию функции, может кому поможет Функция фоПолучитьТелефоны(Телефон,Обр) Экспорт ТелефонГородской=""; ТелефонМобильный=""; Цифры="0123456789"; Вр = СтрЗаменить(Телефон,"+7","8"); Ц=1;Т=""; Пока Ц<=СтрДлина(Вр) Цикл Если Найти(Цифры,Сред(Вр,Ц,1))>0 Тогда Т = Т + Сред(Вр,Ц,1); КонецЕсли; Ц = Ц + 1 КонецЦикла; Если СтрДлина(Т)=7 тогда // Городской ТелефонГородской = "8812"+Т; ТелефонМобильный = ""; КонецЕсли; Если СтрДлина(Т)=10 тогда // Федеральный без +7 ТелефонГородской = ""; ТелефонМобильный = "8"+Т; КонецЕсли; Если СтрДлина(Т)=11 тогда // Федеральный ТелефонГородской = ""; ТелефонМобильный = Т; КонецЕсли; Если СтрДлина(Т)=14 тогда // Два городских ТелефонГородской = "8812"+Лев(Т,7); ТелефонМобильный = ""; КонецЕсли; Если СтрДлина(Т)=17 тогда // Городской и федеральный Тмп = Сред(Т,1,3); Если Тмп = "812" или Тмп = "911" или Тмп = "921" или Тмп = "901" или Тмп = "904" или Тмп = "905" или Тмп = "951" или Тмп = "909" тогда ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,10)); ТелефонГородской = фоДобавитьПрефикс(Сред(Т,11,СтрДлина(Т))); иначе ТелефонГородской = фоДобавитьПрефикс(Лев(Т,7)); ТелефонМобильный = фоДобавитьПрефикс(Сред(Т,8,СтрДлина(Т))); КонецЕсли; КонецЕсли; Если СтрДлина(Т)=18 тогда // Городской и федеральный Тмп = Сред(Т,1,4); Если Тмп = "8812" или Тмп = "8911" или Тмп = "8921" или Тмп = "8901" или Тмп = "8904" или Тмп = "8905" или Тмп = "8951" или Тмп = "8960" или Тмп = "8909" тогда ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,11)); ТелефонГородской = фоДобавитьПрефикс(Сред(Т,12,СтрДлина(Т))); иначе ТелефонГородской = фоДобавитьПрефикс(Лев(Т,7)); ТелефонМобильный = фоДобавитьПрефикс(Сред(Т,8,СтрДлина(Т))); КонецЕсли; КонецЕсли; Если СтрДлина(Т)=20 тогда // федеральный и федеральный ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,10)); ТелефонГородской = ""; КонецЕсли; Если СтрДлина(Т)=21 тогда // федеральный и федеральный Если Лев(Т,1)="8" тогда ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,11)); ТелефонГородской = ""; Иначе ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,10)); ТелефонГородской = ""; КонецЕсли КонецЕсли; Если СтрДлина(Т)=22 тогда // федеральный и федеральный ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,11)); ТелефонГородской = ""; КонецЕсли; Если СтрДлина(Т)=25 тогда // Два городских и федеральный Тмп = Сред(Т,1,3); Если Тмп = "812" или Тмп = "911" или Тмп = "921" или Тмп = "901" или Тмп = "904" или Тмп = "905" или Тмп = "951" или Тмп = "909" тогда ТелефонМобильный = фоДобавитьПрефикс(Лев(Т,11)); ТелефонГородской = ""; иначе ТелефонГородской = фоДобавитьПрефикс(Лев(Т,7)); ТелефонМобильный = ""; КонецЕсли; КонецЕсли; Если Лев(ТелефонМобильный,1)="7" тогда ТелефонМобильный="8"+Прав(ТелефонМобильный,СтрДлина(ТелефонМобильный)-1); КонецЕсли; //Если Лев(ТелефонГородской,1)="7" тогда ТелефонГородской="8"+Прав(ТелефонГородской,СтрДлина(ТелефонГородской)-1); КонецЕсли; Если Обр=1 тогда ТелефонГородской=фоВидДляЧеловека(ТелефонГородской); ТелефонМобильный=фоВидДляЧеловека(ТелефонМобильный); КонецЕсли; Возврат ТелефонГородской+Символы.ПС+ТелефонМобильный; КонецФункции |
|||
|
30
Maxus43
01.03.10
✎
17:03
|
(28) придётся пользовать встроенный язык. Запрос выгружаем в ТЗ и понеслась.
Не надо ждать от SQL запроса функциональности среды разработки... |
|||
|
31
fishman
01.03.10
✎
17:05
|
(22) можно ли данную функцию применить в ОсновнаяСхемаКомпоновкиДанных? для конкретных реквизитов при выводе отчета?
|
|||
|
32
Киборг
01.03.10
✎
17:08
|
(31) Длину строчного значения в запросе нельзя определить. И поэтому данную функцию нельзя применить.
|
|||
|
33
Maxus43
01.03.10
✎
17:11
|
(32) можно путём глубокого извращения и длинну определить, точнее привести к постоянной
|
|||
|
34
i-rek
01.03.10
✎
17:14
|
(28) такое применение возможно. В компоновке можно вызывать функции общих модулей.
|
|||
|
35
Киборг
01.03.10
✎
17:14
|
хотя в СКД можно же вызвать функцию представления данных...
|
|||
|
36
Киборг
01.03.10
✎
17:16
|
(33) гм... а ты станешь это делать? или теоретически предлагаешь?
|
|||
|
37
Maxus43
01.03.10
✎
17:18
|
(36) я - нет. Теоретически. Я сделал бы как (30).
хотя конечно если (34), то вопрос уже отпал. |
|||
|
38
fishman
01.03.10
✎
17:19
|
(34) как?????????? объясните непосвященному
|
|||
|
39
Лисёнко
01.03.10
✎
17:20
|
(28) а вы не могли бы рассказать поподробней?
|
|||
|
40
Киборг
01.03.10
✎
17:20
|
(38) смотри выражения в вычисляемых полях
точно не скажу, сам не использовал |
|||
|
41
73
01.03.10
✎
17:33
|
ПроцессорКомпоновкиДанных (DataCompositionProcessor)
Инициализировать (Initialize) Синтаксис: Инициализировать(<Макет>, <Внешние наборы данных>, <Данные расшифровки>, <Возможность использования внешних функций>) Оно? |
|||
|
42
fishman
01.03.10
✎
17:38
|
(40), (34) Спасиб получилось!
Вкладка Вычисляемые поля создаем новое поле задаем ему имя в Выражении пишем НашМодуль.Функция(РедактируемыйРеквизит) жмем выполнить =) УРА! |
|||
|
43
Киборг
01.03.10
✎
17:42
|
(42) наверно его еще в ресурсы надо добавить
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |