Имя: Пароль:
1C
 
Как в запросе проверить на пустую строку?
0 mikecool
 
05.05.08
22:38
В смысле аналог TRIM или СОКРЛП ?
1 mikecool
 
05.05.08
22:39
ни одной книжки под рукой, сам не знаю/не помню, а запросец подправить нада...
а франь подсунул кривое обновление...
2 Конфигуратор Сеня
 
05.05.08
22:39
да ну тебя...
3 mikecool
 
05.05.08
22:40
(2) редиска... я же тебя не запросы писать заставляю :)
4 mikecool
 
05.05.08
22:40
ладна... подберем перебором :)
5 mikecool
 
05.05.08
23:00
не получается перебор... :(
6 GenV
 
05.05.08
23:13
(0) А тебе проверку на полностью пустую строку надо (т.е. члибо пустую, либо содержащюю пробелы)? Или все  таки есть другие символы и нужно их отсечь?

Первый вариант можно попробывать через сортировку. Второй я не знаю как :(
7 mikecool
 
05.05.08
23:16
(6) не, проверить на полностью пустую строку, т.е. аналог СОКРЛП...
8 Immortal
 
05.05.08
23:18
(0) почти никак..без извратов не получиццо
9 mikecool
 
05.05.08
23:22
а пустая строка является значением NULL?
10 Immortal
 
05.05.08
23:25
(9) если там пробелы есто то нет
да и без пробелов имхо не будет NULL, а будет ""
11 mikecool
 
05.05.08
23:29
таки как мне сравнить строку из базы с ""?
блин, вроде простая задача для скуля, но не для восьмерки.. :(
12 GenV
 
05.05.08
23:30
(7) Попробуй добавить поле-флаг где прописать типа:

ВЫБОР КОГДА НашеПоле < &ПустаяСтрока ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КАК ПолеФлаг

Параметр ПустаяСтрока = "_______1"
(где вместо "_" - пробелы и их должно быть максимальное возможное количество для строки)
Может подойдет :)

(8) Мtня изврат тоже заинтересовал. Хотя бы идею ^) Как-то тоже сталкивался с такой задачей.
13 Immortal
 
05.05.08
23:33
(12)Текст = " ГДЕ ИсходнаяСтрока = """;
Пробел = " ";
Для Инд=1 по МаксПробелов цикл
Текст = Текст + "ИЛИ ИсходнаяСтрока = " + Пробел + ";
Пробел= Пробел + " ";
КонецЦикла;
14 GenV
 
05.05.08
23:37
(12) Спасибо. По крайней мере, при таком условии, проверка будет однозначно правильная.
15 Immortal
 
05.05.08
23:37
кстати, больше меньше тоже мысль..
только как он их сравнивает?
16 GenV
 
05.05.08
23:37
(14) - (13)
17 Immortal
 
05.05.08
23:38
(15)-(12) -)
18 mikecool
 
05.05.08
23:39
(13) не, должно же быть решение проще...
19 NewNick
 
05.05.08
23:41
тогда как варинт юзать подобно %[^{тут перебираем все не пробелеистые символы, хз как}]%
20 NewNick
 
05.05.08
23:41
только чето все не то
21 mikecool
 
05.05.08
23:44
вот же блин... надо всего лишь проверить, пустой ИНН у конры или нет, а проблема - неразрешимая :)
22 Immortal
 
05.05.08
23:44
(18) строка кстати это что? если реквизит чего либо то можно сначала в базе найти эти записи, слить их во временную таблицу, а потом в запросе NOT IN
23 NewNick
 
05.05.08
23:45
(21) так там же есть ограничение по длине все намного проще хотя и не элегантно конечно
24 mikecool
 
05.05.08
23:46
(22) ИНН - реквизит контрагента, строка(12)
нот ин чего?
25 Immortal
 
05.05.08
23:46
(21) а=))
ИНН строковый..мде..где то тут пробегала корячка как строку в число переделать..
а там уж и проверить можно..
только там тоже с извратом
26 mikecool
 
05.05.08
23:46
перепробовал TRIM, СокрЛП, ПустаяСтрока - не угадал ни одной буквы...
27 NewNick
 
05.05.08
23:47
вбей массив в цикле из 13 значений и проверяй что не в (&массивпустыхстрок)
28 Immortal
 
05.05.08
23:47
(24) НЕ В(ТаблицеКонтровСХеровымиИНН)
но я так понял тебе надо именно этих и найти?  c пустыми,или же просто их отфильтровать?
29 NewNick
 
05.05.08
23:49
(25)
Функция ТекстЗапросаИзСтрокиВЧисло(ИмяПоля, ДлинаСтроки, СимволРазделитель=".")
   текст = "";
   текст2 = "";
   Для позиция = 1 по ДлинаСтроки цикл
       текст = "("+?(текст="","",текст+ Символы.ПС + "     *ВЫБОР КОГДА ПОДСТРОКА("+имяПоля+","+позиция+",1)="""+СимволРазделитель+""" ТОГДА 1 ИНАЧЕ 10 КОНЕЦ +")+Символы.ПС+"ВЫБОР ";
       Для цифирка = 0 по 9 цикл
           текст = текст + Символы.ПС + " КОГДА ПОДСТРОКА("+имяПоля+","+позиция+",1)="""+цифирка+""" ТОГДА "+цифирка;
       КонецЦикла;
       текст = текст + Символы.ПС + " ИНАЧЕ 0 КОНЕЦ)";
       текст2 = текст2 + Символы.ПС + " КОГДА ПОДСТРОКА("+имяПоля+","+позиция+",1)="""+СимволРазделитель+""" ТОГДА "+формат(pow(10,ДлинаСтроки-позиция),"ЧГ=");
   КонецЦикла;
   возврат текст + Символы.ПС + "/ ВЫБОР " + текст2+Символы.ПС + " ИНАЧЕ 1 КОНЕЦ " + СИмволы.ПС +" * ВЫБОР КОГДА "+ИмяПоля+" ПОДОБНО ""%-%"" ТОГДА -1 ИНАЧЕ 1 КОНЕЦ";
КонецФункции

;)
30 GenV
 
05.05.08
23:50
(22) Тоже вариант. Тем более длина ограничена.
(15) истина будет для пустой строки, и строк с пробелами в начале (главное чтобы не было перебора длины), ну и вместо единицы нужно поставить самый первый символ по коду. Если пробелов меньше вроде тоже нормально.
31 Immortal
 
05.05.08
23:51
(29) ага, это и было.=)
32 Immortal
 
05.05.08
23:52
(30) нада посмотреть=)
вот как даламаю висту мож и посмотрю=)
33 mikecool
 
05.05.08
23:53
запрос на поиск контров с одинаковым ИНН:
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
   Справочник.Контрагенты КАК Контрагенты
ГДЕ
   Контрагенты.ИНН = &ИНН
   И Контрагенты.КПП = &КПП
   И Контрагенты.Ссылка <> &Ссылка
И НЕ (Контрагенты.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ФизЛицо) И <здесь должна быть функция>(Контрагенты.ИНН)="""")
34 mikecool
 
05.05.08
23:54
уже появляется мысль: и нафик я подался к этой восьмерке, когда звали писать под оракуль? :)
35 NewNick
 
05.05.08
23:55
(31) а в кз вариант "конкурента" ;)  (сорь за оффтоп)
36 Immortal
 
05.05.08
23:56
(34) гг=))не, "ораклоид" как то не звучит=)
37 NewNick
 
05.05.08
23:57
(33) с таким подходом пиши уж
И НЕ (Контрагенты.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ФизЛицо) И Контрагенты.ИНН<"0"
38 mikecool
 
05.05.08
23:58
(36) ораклист :))
39 mikecool
 
05.05.08
23:58
(37) гм... щас попробую...
40 GenV
 
05.05.08
23:58
(34) Попробуй:

Контрагенты.ИНН < &ПустаяСтрока

ПустаяСтрока - 11 пробелов и 1
41 GenV
 
06.05.08
00:00
(37) " 0" пройдет :(
42 Immortal
 
06.05.08
00:00
(40) да да, должно быть верно так.
43 NewNick
 
06.05.08
00:03
(41) угу пройдет.. тогда меньше или равно чем 12 пробелов подряд ))
44 mikecool
 
06.05.08
00:04
поглядел на время - у меня полночь, и решил: а ну его нафик, это сравнение...
завтра придет прог из франя, пусть он свою корявку и правит(поскольку запрос изначально был некорректно им написан)...
оставлю только свою проверку на физлицо
еще надо обмен проводить с филиалами...
45 GenV
 
06.05.08
00:05
(43) Точно, так будет лучше :)
46 NewNick
 
06.05.08
00:10
кстати я чет не могу сразу понять
а условие на >=" " И <=N*" " даст ли нам чисто варианты из пустых строк с кол-вом пробелов от 1 до N
47 Tapo4ek
 
06.05.08
09:23
А че (ВЫБОР КОГДА Таблица.Поле = """" тогда) не канает???
48 Tapo4ek
 
06.05.08
09:23
А NULL вообще полуается только когда поле не найдено или строка итога.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс