Имя: Пароль:
1C
1С v8
Можно ли запросом получить Артикул и строковую функцию СтрДлина(Артикул)?
0 Мимохожий Однако
 
08.01.13
14:49
Если сделать выборку, то можно получить строковой функцией СтрДлина(). Однако есть ли возможность получить список Артикулов и их строковую длину?
2 Мимохожий Однако
 
08.01.13
15:19
.
3 PR
 
08.01.13
15:20
Нет
4 palpetrovich
 
08.01.13
15:28
(3) чего это, заводи отдельный ревизит СтрДлинаАртикул зависимый от  Артикул - и вуаля :)
5 Мимохожий Однако
 
08.01.13
15:54
(4)"Вуаля" ...)) У клиентов в базе артикул является началом наименования и надо проверить соответствие начала наименования и артикула. Сделал в выборке.
6 palpetrovich
 
08.01.13
16:30
(5) а ПОДОБНО не спасает? у Артикул-а длина-же переменная наверное
7 Мимохожий Однако
 
08.01.13
16:37
(6)Пробовал
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Наименование ПОДОБНО Номенклатура.Артикул
...
Даёт пустой список
..
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Наименование НЕ ПОДОБНО Номенклатура.Артикул
..
Даёт весь список товара
8 palpetrovich
 
08.01.13
16:44
(7) а артикулы разной длины? ...както так напрашивется:
ГДЕ
Номенклатура.Артикул ПОДОБНО ВЫРАЗИТЬ(Номенклатура.Наименование КАК Строка (5))
9 Мимохожий Однако
 
08.01.13
17:06
Артикулы к сожалению разной длины от 5 до 25 символов с черточками и точками.
10 Мимохожий Однако
 
08.01.13
17:07
Честно говоря, мой пост скорее теоретический. В данному случае, рулит только выборка и обработка каждой строки.
11 hhhh
 
08.01.13
17:08
(7) как-то так

ВЫБОР КОГДА ПОДСТРОКА(Артикул,1,1) = Артикул ТОГДА 1
КОГДА ПОДСТРОКА(Артикул,1,2) = Артикул ТОГДА 2
КОГДА ПОДСТРОКА(Артикул,1,3) = Артикул ТОГДА 3
КОГДА ПОДСТРОКА(Артикул,1,4) = Артикул ТОГДА 4
КОГДА ПОДСТРОКА(Артикул,1,5) = Артикул ТОГДА 5
КОГДА ПОДСТРОКА(Артикул,1,6) = Артикул ТОГДА 6
КОГДА ПОДСТРОКА(Артикул,1,7) = Артикул ТОГДА 7
КОГДА ПОДСТРОКА(Артикул,1,8) = Артикул ТОГДА 8
КОГДА ПОДСТРОКА(Артикул,1,9) = Артикул ТОГДА 9
КОГДА ПОДСТРОКА(Артикул,1,10) = Артикул ТОГДА 10
КОНЕЦ КАК ДлинаАртикула
12 palpetrovich
 
08.01.13
17:14
о, так работает кажись
ГДЕ
   НЕ Номенклатура.Артикул="" И
   Номенклатура.Наименование ПОДОБНО Номенклатура.Артикул+"%"
13 Mafoni
 
08.01.13
17:19
(12) +100500

вот полный текст запроса
у меня работает

ВЫБРАТЬ
   Тест1.Код,
   Тест1.Наименование,
   ВЫБОР КОГДА Тест1.Наименование ПОДОБНО  Тест1.Код + "%" ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Подобие
ИЗ
   Справочник.Тест1 КАК Тест1

в справочнике "Тест1" ввел три элемента вот такие -
1. Код = 000000001 Наименование = 000000001 лабуда
2. Код = 000000002 Наименование = 000000002 - лабуда 2
3. Код = 000000003 Наименование = 000000002 - лабуда 3

результат запроса вот такой
Код            Наименование            Подобие
000000001    000000001 лабуда    Да
000000002    000000002 - лабуда 2    Да
000000003    000000002 - лабуда 3    Нет
14 Mafoni
 
08.01.13
17:19
(0) думаю эт то что требовалось !
15 palpetrovich
 
08.01.13
17:21
(13) все с назаполненным Код-ом - будут в выборке, так что (12) всетаки получше  :)
16 Mafoni
 
08.01.13
17:23
(15) спорить не буду - вы правы на все 100% но отборы то уж пущай ТС добавляет.
17 Мимохожий Однако
 
08.01.13
17:27
(12)Попробовал. У меня не работает. Результат как в (8). Появляется весь список номенклатуры.
(13)Мне кажется с кодом пример неудачный, т.к. там фиксированная строка.
(11)Пока не опробовал, но посмотрю.
18 palpetrovich
 
08.01.13
17:30
(17) точно точно? у меня нижеследующее работает как надо
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   НЕ Номенклатура.Артикул="" И
   Номенклатура.Наименование ПОДОБНО Номенклатура.Артикул+"%"
19 palpetrovich
 
08.01.13
17:30
+18 "+"%" - точно не забыл? :)
20 hhhh
 
08.01.13
17:31
(14) не прокатит. Например, такое

код "1", наименование "11 лабуда"
21 palpetrovich
 
08.01.13
17:35
(20) "11 лабуда" в (18) прокатывает :)
22 Fragster
 
гуру
08.01.13
17:35
автор уже 100500 раз проверил бы в постобработке запроса. правда наверняка пропустил бы (20)
23 Mafoni
 
08.01.13
17:38
(20) согласен
24 Mafoni
 
08.01.13
17:39
(21) а у вас коллега какой результат получился
в моем случае код = 1 подобно наименование = "11 лабуда" ?
25 palpetrovich
 
08.01.13
17:41
(24) попадает в результат. Только у меня Артикул = 1
26 Mafoni
 
08.01.13
17:44
(0) ТС - а чего не используеш постобработку запроса ? в этом какие то трудности ? или принципиально хочется сделать запросом ?
27 palpetrovich
 
08.01.13
17:52
короче, немоного тероии
"Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
• % (процент): последовательность, содержащая любое количество произвольных символов..." ну и т.д.

т.е. ГДЕ ПРОВЕРЯЕМОЕ ПОДОБНО ШАБЛОН+"%"
ИСТИНА при, кпримеру, ПРОВЕРЯЕМОЕ = "Впкплплдоуд" и ШАБЛОН = "Впкп"  и т.д.
28 Mafoni
 
08.01.13
17:53
(27) да не старайсы ты так - ТС - то слился уже поди!
29 palpetrovich
 
08.01.13
17:54
(28) ну и ладненько, мне тоже пора :)
30 Мимохожий Однако
 
08.01.13
17:59
(19)Код скопировал один в один
(22)Постообработка - это фактически обыкновенная выборка.
(28) не надо нервничать )) Я здесь. Немножко работаю, немножко на форум смотрю.
Твой код еще не проверил.
31 Мимохожий Однако
 
08.01.13
18:00
(22) Уточню. Делать обработку после получения результатов запроса то же самое, что просто запустить выборку по справочнику. Этот вариант я уже сделал в самом начале еще до того как открыл ветку.
32 Mafoni
 
08.01.13
18:04
(30) да я спокоен как удав. :)
проверь - интересно что у тя получится ! :)
33 Мимохожий Однако
 
08.01.13
18:35
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул,
   ВЫБОР
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 1) = Номенклатура.Артикул
           ТОГДА 1
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 2) = Номенклатура.Артикул
           ТОГДА 2
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 3) = Номенклатура.Артикул
           ТОГДА 3
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 4) = Номенклатура.Артикул
           ТОГДА 4
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 5) = Номенклатура.Артикул
           ТОГДА 5
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 6) = Номенклатура.Артикул
           ТОГДА 6
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 7) = Номенклатура.Артикул
           ТОГДА 7
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 8) = Номенклатура.Артикул
           ТОГДА 8
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 9) = Номенклатура.Артикул
           ТОГДА 9
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 10) = Номенклатура.Артикул
           ТОГДА 10
   КОНЕЦ КАК ДлинаАртикула
ПОМЕСТИТЬ Временная
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   НЕ Номенклатура.Артикул = ""

СГРУППИРОВАТЬ ПО
   ВЫБОР
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 1) = Номенклатура.Артикул
           ТОГДА 1
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 2) = Номенклатура.Артикул
           ТОГДА 2
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 3) = Номенклатура.Артикул
           ТОГДА 3
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 4) = Номенклатура.Артикул
           ТОГДА 4
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 5) = Номенклатура.Артикул
           ТОГДА 5
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 6) = Номенклатура.Артикул
           ТОГДА 6
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 7) = Номенклатура.Артикул
           ТОГДА 7
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 8) = Номенклатура.Артикул
           ТОГДА 8
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 9) = Номенклатура.Артикул
           ТОГДА 9
       КОГДА ПОДСТРОКА(Номенклатура.Артикул, 1, 10) = Номенклатура.Артикул
           ТОГДА 10
   КОНЕЦ,
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Временная.Ссылка,
   Временная.Наименование,
   ПОДСТРОКА(Временная.Артикул, 1, Временная.ДлинаАртикула) КАК АртикулПодстрокой,
   ПОДСТРОКА(Временная.Наименование, 1, Временная.ДлинаАртикула) КАК НачалоНаименования
ПОМЕСТИТЬ ВтораяВремянка
ИЗ
   Временная КАК Временная
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВтораяВремянка.Ссылка,
   ВтораяВремянка.Наименование,
   ВтораяВремянка.АртикулПодстрокой,
   ВтораяВремянка.НачалоНаименования
ИЗ
   ВтораяВремянка КАК ВтораяВремянка
ГДЕ
   НЕ ВтораяВремянка.АртикулПодстрокой ПОДОБНО ВтораяВремянка.НачалоНаименования
34 Мимохожий Однако
 
08.01.13
18:38
Остаётся придумать цикличную функцию по формированию текста запроса для произвольной длины сравниваемых реквизитов.))
35 palpetrovich
 
09.01.13
13:16
(34) а че тут думать? просто все:
ТекстВЫБОР = "ВЫБОР"
Для Инд По ТекДлинаАртикула Цикл
   ТекстВЫБОР = ТекстВЫБОР + " КОГДА ПОДСТРОКА(Номенклатура.Артикул,1,"+Инд+") = Номенклатура.Артикул ТОГДА "+Инд;
КонецЦикла;
ТекстВЫБОР = ТекстВЫБОР + " КОНЕЦ КАК ДлинаАртикула";

а насчет (18) - мне даже интересно, почему у меня работает, а у тебя нет
http://4put.ru/pictures/max/501/1540226.jpg
36 Мимохожий Однако
 
09.01.13
20:23
(35) Работает вот такой запрос
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование,
   Номенклатура.Артикул
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Артикул <> ""
   И НЕ Номенклатура.Наименование ПОДОБНО Номенклатура.Артикул + "%"
37 Мимохожий Однако
 
09.01.13
20:24
а (18) не работает.
38 МихаилМ
 
09.01.13
21:33
39 palpetrovich
 
09.01.13
22:48
(36) (18) работает, выводит ИМЕННО совпадающие!
...короче, ворос формулировать надо поточне, что-бы не было недопонимания ;)
Программист всегда исправляет последнюю ошибку.