|
Запрос | ☑ | ||
---|---|---|---|---|
0
ОффПланктон
30.10.12
✎
16:02
|
Как сделать Запрос на количество символов, предположим в Реквизите ИНН >=10
|
|||
1
ОффПланктон
30.10.12
✎
16:02
|
лучше <=
|
|||
2
Maxus43
30.10.12
✎
16:03
|
запрос чистый? или СКД?
|
|||
3
ОффПланктон
30.10.12
✎
16:07
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
МойЗапрос = Новый Запрос(); МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И Контрагенты.Комментарий <> &ПустоеЗначение | И Контрагенты.ИНН <> &ПустоеЗначение"; МойЗапрос.УстановитьПараметр("ПустоеЗначение",""); Выборка = МойЗапрос.Выполнить().Выбрать(); |
|||
4
ОффПланктон
30.10.12
✎
16:08
|
не хочет перезаписывать из-за того что параметр ИНН в некоторых случаях больше допустимого значения (вроде 10 знаков)
|
|||
5
Defender aka LINN
30.10.12
✎
16:10
|
НЕ (ИНН ПОДОБНО [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
И НЕ (ИНН ПОДОБНО [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) |
|||
6
palpetrovich
30.10.12
✎
16:11
|
(4) кто "не хочет перезаписывать"?
может проще на этапе выборки из запроса проверять? |
|||
7
Лефмихалыч
30.10.12
✎
16:12
|
ПОДОБНО "___________"
"_" - это любой символ |
|||
8
Лефмихалыч
30.10.12
✎
16:13
|
а, даже так "_________%" - 10 и более, а не 11
|
|||
9
ОффПланктон
30.10.12
✎
16:15
|
как в коде это будет выглядеть, сорь за наивность - новичек
|
|||
10
palpetrovich
30.10.12
✎
16:16
|
(8) плюсик те за это, не знал. правда и сейчас не знаю где может пригодится :)
|
|||
11
palpetrovich
30.10.12
✎
16:17
|
(10)
ВЫБРАТЬ Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ НЕ Контрагенты.Наименование ПОДОБНО "_________%" |
|||
12
palpetrovich
30.10.12
✎
16:17
|
(11) - > (9) :)
|
|||
13
Reset
30.10.12
✎
16:21
|
Условие "длина меньше N"
Подстрока(Контрагенты.Наименование,N,1)="" Условие "длина меньше или равно N" Подстрока(Контрагенты.Наименование,N+1,1)="" Условие "длина больше N" Подстрока(Контрагенты.Наименование,N+1,1)<>"" |
|||
14
GANR
30.10.12
✎
16:34
|
(0) Под справочник "Контрагенты" допили уже сам...
ВЫБРАТЬ НаборСтрок.Строчка КАК Строчка, МАКСИМУМ(Числа_до_125.ОчередноеЧисло) КАК НомерСимвола ИЗ (ВЫБРАТЬ "123456789" КАК Строчка ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1234567890" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "123456789011156") КАК НаборСтрок, (ВЫБРАТЬ 5 * 5 * Цифры_1.Цифра + 5 * Цифры_2.Цифра + Цифры_3.Цифра КАК ОчередноеЧисло ИЗ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_2 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_3 ПО (ИСТИНА)) КАК Числа_до_125 ГДЕ ПОДСТРОКА(НаборСтрок.Строчка, Числа_до_125.ОчередноеЧисло, 1) <> "" СГРУППИРОВАТЬ ПО НаборСтрок.Строчка |
|||
15
GANR
30.10.12
✎
16:36
|
+(14) В запросе поле "НомерСимвола" означает "КоличествоСимволовВСтроке"
|
|||
16
GANR
30.10.12
✎
16:38
|
(0) попробуй (14) прямо в консоли - там нет привязки к конфигурации
|
|||
17
ОффПланктон
30.10.12
✎
16:51
|
(14) мозгодробильный код, ниче не понял
|
|||
18
GANR
30.10.12
✎
16:58
|
(17) Это, к сожалению, единственное, что сработает в рамках 1С-запросов. Стандартной нумерации нет. Он не столько сложен, сколько длинен. Например, этот подзапрос
ВЫБРАТЬ 5 * 5 * Цифры_1.Цифра + 5 * Цифры_2.Цифра + Цифры_3.Цифра КАК ОчередноеЧисло ИЗ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_2 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4) КАК Цифры_3 ПО (ИСТИНА) Предназначен для генерации последовательности чисел до 124 включительно 0 1 ... 123 124 Эта функция ПОДСТРОКА(НаборСтрок.Строчка, Числа_до_125.ОчередноеЧисло, 1) вернет "" если 2-й аргумент Числа_до_125.ОчередноеЧисло больше длины строки Ну а МАКСИМУМ(Числа_до_125.ОчередноеЧисло) - максимальный номер символа в строке Вот и всё! |
|||
19
palpetrovich
30.10.12
✎
16:58
|
(17) поддерживаю :)
а чем (11) не нравится? |
|||
20
GANR
30.10.12
✎
16:59
|
(19) как вычислить длину строки при необходимости?
|
|||
21
Reset
30.10.12
✎
17:00
|
(17) Код для определения длины строки (названного НомерСимвола) в запросе.
Если само значение длины не важно, а важно только больше/меньше ли оно какого-л значения, достаточно (13), ну или вариантов с Подобно |
|||
22
palpetrovich
30.10.12
✎
17:03
|
(20) а где в сабже "вычислить длину строки "?
там только про "<=10" |
|||
23
GANR
30.10.12
✎
17:03
|
(17) Открой (14) и генератор чисел (18) в обработке "консоль запросов" - и всё станет ясно
|
|||
24
Reset
30.10.12
✎
17:04
|
(14) Я бы Цифры в отдельную ВТ сначала положил - меньше текст запроса почти в 3 раза
|
|||
25
GANR
30.10.12
✎
17:04
|
(22) >Как сделать Запрос на количество символов
|
|||
26
Лефмихалыч
30.10.12
✎
17:04
|
Запрос не умеет вычислять длину строки
|
|||
27
1Страх
30.10.12
✎
17:05
|
(26) смотря какой ))
|
|||
28
Reset
30.10.12
✎
17:06
|
(26) Это можно сымитировать через соединение с таблицей числовых констант, выше пример
|
|||
29
GANR
30.10.12
✎
17:06
|
(27) 1С. Можно прямой запрос к SQL, конечно, сваять, но... Имхо, проще (14).
|
|||
30
ОффПланктон
30.10.12
✎
17:14
|
(11) пишет
|
|||
31
ОффПланктон
30.10.12
✎
17:15
|
(11)
Неопознанный оператор | НЕ Контрагенты.ИНН ПОДОБНО "__________<<?>>%" |
|||
32
Reset
30.10.12
✎
17:16
|
(31) Кавычки нужно двойные
|
|||
33
ОффПланктон
30.10.12
✎
17:17
|
у меня проблема в том, что в некоторых полях докумета больше символов забито, больше 10-ти, и когда я пытаюсь перепровести спомощью запроса, он мне кукишь)
|
|||
34
ОффПланктон
30.10.12
✎
17:18
|
(32) | НЕ Контрагенты.ИНН ПОДОБНО ""__________%""
все равно Проверка клиентского приложения {Форма.Форма(13,49)}: Ожидается символ ';' | НЕ Контрагенты.ИНН ПОДОБНО ""__________%""<<?>> |
|||
35
Reset
30.10.12
✎
17:20
|
(34) Ожидается символ ';'
|
|||
36
ОффПланктон
30.10.12
✎
17:22
|
Ставил в конце ; пишет тоже самое
|
|||
37
Reset
30.10.12
✎
17:23
|
ять.
НЕ Контрагенты.ИНН ПОДОБНО ""__________%"""; |
|||
38
GANR
30.10.12
✎
17:24
|
(36) Код процедуры, целиком, в студию !!!
|
|||
39
ОффПланктон
30.10.12
✎
17:24
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
МойЗапрос = Новый Запрос(); МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И Контрагенты.Комментарий <> &ПустоеЗначение | НЕ Контрагенты.ИНН ПОДОБНО ""__________%"" МойЗапрос.УстановитьПараметр("ПустоеЗначение",""); //МойЗапрос.УстановитьПараметр("10",) Выборка = МойЗапрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл //Если Выборка.ИНН Тогда Иначе НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Ссылка = Выборка.Ссылка; НоваяСтрока.КоментДо = Выборка.Комментарий; Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.Комментарий = "№№№" + Выборка.Комментарий; Объект.Записать(); НоваяСтрока.КоментПосле = Объект.Комментарий; КонецЦикла КонецПроцедуры |
|||
40
GANR
30.10.12
✎
17:27
|
(39) Замени его у себя на это - 2 символа после текста запроса "; добавил
Процедура КнопкаВыполнитьНажатие(Кнопка) МойЗапрос = Новый Запрос(); МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И Контрагенты.Комментарий <> &ПустоеЗначение | НЕ Контрагенты.ИНН ПОДОБНО ""__________%"""; МойЗапрос.УстановитьПараметр("ПустоеЗначение",""); //МойЗапрос.УстановитьПараметр("10",) Выборка = МойЗапрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл //Если Выборка.ИНН Тогда Иначе НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Ссылка = Выборка.Ссылка; НоваяСтрока.КоментДо = Выборка.Комментарий; Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.Комментарий = "№№№" + Выборка.Комментарий; Объект.Записать(); НоваяСтрока.КоментПосле = Объект.Комментарий; КонецЦикла КонецПроцедуры |
|||
41
ОффПланктон
30.10.12
✎
17:34
|
(40) ошибка в конф. ушла, захожу в отладку пишет
{Форма.Форма(16)}: Ошибка при вызове метода контекста (Выполнить): {(10, 4)}: Синтаксическая ошибка "НЕ" <<?>>НЕ Контрагенты.ИНН ПОДОБНО "__________%" Выборка = МойЗапрос.Выполнить().Выбрать(); по причине: {(10, 4)}: Синтаксическая ошибка "НЕ" <<?>>НЕ Контрагенты.ИНН ПОДОБНО "__________%" |
|||
42
GANR
30.10.12
✎
17:38
|
(41) Добавь И перед последним условием
МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И Контрагенты.Комментарий <> &ПустоеЗначение | И НЕ Контрагенты.ИНН ПОДОБНО ""__________%"""; |
|||
43
ОффПланктон
30.10.12
✎
17:41
|
(41) он тогда вообще меняет у тех Контрагентов у которых нет ИНН вообще (только)
|
|||
44
Reset
30.10.12
✎
17:43
|
(43) Ты сам такое условие задал, длина меньше 10. Ноль - меньше.
|
|||
45
GANR
30.10.12
✎
17:49
|
(43) А если запрос заменить на это?
МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И Контрагенты.Комментарий <> &ПустоеЗначение | И ПОДСТРОКА(Контрагенты.ИНН, 10, 1) <> """""; |
|||
46
GANR
30.10.12
✎
18:01
|
МойЗапрос = Новый Запрос;
МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование ПОДОБНО ""%завод%"" | И (ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500))) <> """" | И ПОДСТРОКА(Контрагенты.ИНН, 10, 1) <> """""; |
|||
47
GANR
30.10.12
✎
18:02
|
(ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500))) - это для строк неограниченной длины, коим является реквизит "Комментарий"
|
|||
48
GANR
30.10.12
✎
18:02
|
ну?
|
|||
49
ОффПланктон
30.10.12
✎
18:02
|
мин.
|
|||
50
ОффПланктон
30.10.12
✎
18:03
|
висит база)
|
|||
51
GANR
30.10.12
✎
18:04
|
Этот цикл
Пока Выборка.Следующий() Цикл //Если Выборка.ИНН Тогда Иначе НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Ссылка = Выборка.Ссылка; НоваяСтрока.КоментДо = Выборка.Комментарий; Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.Комментарий = "№№№" + Выборка.Комментарий; Объект.Записать(); НоваяСтрока.КоментПосле = Объект.Комментарий; КонецЦикла наверное? |
|||
52
GANR
30.10.12
✎
18:11
|
(50) Всё висит? Отладка \ остановить, если через отладчик делаешь сделай и Отладка \ Текущая строка сделай. Где он хоть висит?
|
|||
53
GANR
30.10.12
✎
18:23
|
Тьху-ё это
(ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500))) <> """" надо заменить на это (ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500))) <> "" |
|||
54
GANR
30.10.12
✎
18:25
|
+(50). (53) отбой! это для консоли запросов
|
|||
55
ОффПланктон
31.10.12
✎
09:53
|
Пока сделал через Попытку), сейчас другой вопрос, как сделать так чтобы он находил вначале примечания символ № (количество любое) и удалил, поможете?
|
|||
56
ОффПланктон
31.10.12
✎
09:54
|
то есть обратную процедуру (с помощью запроса)
|
|||
57
GANR
31.10.12
✎
10:04
|
(55) Запрос должен быть приблизительно такой:
МойЗапрос = Новый Запрос; МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | ПОДСТРОКА(ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500)), 1, 1) = ""№"""; |
|||
58
ОффПланктон
31.10.12
✎
10:17
|
а можете написать где все это можно прочитать (синтаксис-условия) запросов...
|
|||
59
GANR
31.10.12
✎
10:26
|
(58) Конфигуратор, меню Справка \ Содержание справки, далее по дереву 1С:Предприятие \ Встроенный язык \ Работа с запросами \ Синтаксис текста запросов.
А вообще, чтобы как следует научиться работать с запросами рекомендую sql-ex.ru (те же приемы прекрасно применимы и в 1С-запросах). Через месяц будешь шлепать (14) не задумываясь, если возьмешься плотно. ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500)) следует использовать для строк неограниченной длины - иначе запрос в ошибку вылетит, а если бы длина была ограничена то Контрагенты.Комментарий прокатило-бы. |
|||
60
ОффПланктон
31.10.12
✎
10:29
|
(59) спасибо за инфу, займусь плотно, а то работа 60% запросы...
|
|||
61
ОффПланктон
31.10.12
✎
10:58
|
(59) а вот смотри, мне сейчас надо удалить спереди стоящие знаки №№№№№№ (их может быть любое кол-во, но только вначале строки Комментарий)как привильно потом задать условие?
Пока Выборка.Следующий() Цикл НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Ссылка = Выборка.Ссылка; НоваяСтрока.КоментДо = Выборка.Комментарий; Объект = Выборка.Ссылка.ПолучитьОбъект(); НоваяСтрока.КоментПосле = Объект.Комментарий; ???? |
|||
62
Reset
31.10.12
✎
11:01
|
(59) Терпеливы Вы, батенька, однако
|
|||
63
ОффПланктон
31.10.12
✎
11:07
|
(61) за это ему БОЛЬШОЕ СПАСИБО!!!
|
|||
64
GANR
31.10.12
✎
11:33
|
(62) Простой на рабочем месте образовался (сидел ждал, пока юзеры выйдут из базы) - вот и решил посидеть на мисте.
|
|||
65
GANR
31.10.12
✎
11:44
|
(61) Идею подскажу, дальше - думай сам, я не вижу данные в базе и не понимаю задачу до конца, да и пора мне за свои дела:
Для Индекс = 0 По 20 Цикл ТвояСтрока = СтрЗаменить(ТвояСтрока, "№№", "№"); КонецЦикла |
|||
66
Светлый Гений
31.10.12
✎
11:49
|
можно еще
СтараяСтрока = ТвояСтрока; ТвояСтрока = СтрЗаменить(ТвояСтрока, "№№", "№"); Пока СтрДлина(СтараяСтрока ) <> СтрДлина(ТвояСтрока) Цикл СтараяСтрока = ТвояСтрока; ТвояСтрока = СтрЗаменить(ТвояСтрока, "№№", "№"); КонецЦикла; |
|||
67
ОффПланктон
31.10.12
✎
14:59
|
(66)заработало, спасибо
Процедура КнопкаВыполнитьНажатие(Кнопка) МойЗапрос = Новый Запрос(); МойЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Комментарий |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | ПОДСТРОКА(ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(500)), 1, 1) = ""№"""; Выборка = МойЗапрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Ссылка = Выборка.Ссылка; НоваяСтрока.КоментДо = Выборка.Комментарий; Объект = Выборка.Ссылка.ПолучитьОбъект(); СтараяСтрока = Выборка.Комментарий; СтараяСтрока = СтрЗаменить(СтараяСтрока, "№", ""); Если СтрДлина(СтараяСтрока ) <> СтрДлина(Объект.Комментарий) Тогда Объект.Комментарий = СтараяСтрока; СтараяСтрока = СтрЗаменить(СтараяСтрока, "№", ""); Попытка Объект.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; НоваяСтрока.КоментПосле = Объект.Комментарий; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |