Имя: Пароль:
1C
1C 7.7
v7: Криво исполняется условие сравнения в цикле. Не ловит незаполненый реквизит.
,
0 raykom
 
27.07.14
19:08
Есть реквизит у Всех справочников. Тип - строка длина - 17
На форме обработки точно такой же реквизит строка,17

В модуле обработки условие, суть которого находить справочник по целому IDD или его части. Задается в реквизите обработки "ЧастьIDD"

Если Найти(Спр.IDD,СокрЛП(ЧастьIDD)) =  1 Тогда
бла-бла-бла

Если ЧастьIDD заполнена полностью - все корректно отлавливает.
Если ЧастьIDD заполнена частично сиволами идущими подряд слева направо - все корректно отлавливает.

А если ЧастьIDD  заполнено частично последовательно идущими символами из произвольного места строки - тогда выборка приходит пустая.
Так же есть точно три пустых IDD у справочников, но по пустому ЧастьIDD  приходит пустая выборка.

Наведите на путь истинный ? Спасибо.
1 NS
 
27.07.14
19:09
(0) что возвращает найти()?
2 NS
 
27.07.14
19:10
когда вторая редакция ЗиК вышла, она вся была утыкана такой ошибкой как у тебя.
3 raykom
 
27.07.14
19:15
Забыл. ТиС ред.7.70.974 платформа - 7.70.927
4 raykom
 
27.07.14
19:16
платформа - 7.70.027
5 raykom
 
27.07.14
19:16
(1)Сейчас
6 raykom
 
27.07.14
19:17
(1)Если Найти(<<?>>) =  1 Тогда//Спр.IDD,СокрЛП(ЧастьIDD)
{Z:\ОБРАБОТКИ\ПРОВЕРКАIDDУСПРАВОЧНИКОВ.ERT(173)}: Ожидается выражение
7 КонецЦикла
 
27.07.14
19:17
Найти(...) > 0
8 raykom
 
27.07.14
19:18
(7)->(6)
9 Отладчик
 
27.07.14
19:18
Предлагаю своё условие. В цикле.
Функция Рассчёт()
Пока 2*2=4 Цикл
Если 2*2=4 Тогда
  Продолжить;
Иначе
  Рассчёт();
КонецЕсли;
КонецЦикла
10 КонецЦикла
 
27.07.14
19:18
Как оно может быть заполнено частично? Сам его так заполнил или МОД?
11 Отладчик
 
27.07.14
19:19
КонецФункции;
12 raykom
 
27.07.14
19:20
(9)А если больше 10 ?
(10)Не отвлекайся. Для темы - неважно.
13 КонецЦикла
 
27.07.14
19:20
(8) Ну ты тупишь конечно... найти возвращает ПОЗИЦИЮ вхождения
14 raykom
 
27.07.14
19:21
(13)Да ... Есть такое
Щас подрихтую
15 Отладчик
 
27.07.14
19:23
(12)
Функция Рассчёт()
Пока 2*2<=4 Цикл
Если 2*2<=4 Тогда
  Продолжить;
Иначе
  Предупреждение(">4". СтатусСообщения.Важное);
  Рассчёт();
КонецЕсли;
КонецЦикла;
КонецФункции
16 raykom
 
27.07.14
19:24
(15)Да не путай ты ... И так туплю. Понял я уже шутку и оценил
17 Отладчик
 
27.07.14
19:24
Не предупреждение - Сообщить смысле
18 raykom
 
27.07.14
19:25
(17)Забей туда функцию СМС себе на номер
19 raykom
 
27.07.14
19:26
(13)Нитересно, почему тогда
Если ЧастьIDD заполнена полностью - все корректно отлавливает.
Если ЧастьIDD заполнена частично сиволами идущими подряд слева направо - все корректно отлавливает.
20 Отладчик
 
27.07.14
19:28
(18) Злой ты.
21 raykom
 
27.07.14
19:35
(20)Да. Чето седня не шутится ...
22 Отладчик
 
27.07.14
19:36
(21) В соседней ветке бухают, ВМФ там.
23 шаэс
 
27.07.14
19:40
(0) навели Вас на путь истинный?
24 raykom
 
27.07.14
19:47
А мне чо, я и в своей могу )) Мне для этого дань ВМФ не нужен. Хотя ВМФу - респект. У меня тут свой дембель сегодня.

Ну да. Частично.
25 шаэс
 
27.07.14
19:50
(24) так что осталось не так, как Вы хотите?
26 raykom
 
27.07.14
19:55
ЖЕна и зарплата ))
27 raykom
 
27.07.14
19:55
Не, пока все ОК. Карябаю код
28 Отладчик
 
27.07.14
20:25
Скоро приставку "де" откинем.
29 Сияющий Асинхраль
 
27.07.14
20:57
(19) Ну чего тупишь, тебе пару раз сказали уже об этом: Если ЧастьIDD заполнена полностью - все корректно отлавливает потому что часть IDD совпадает с нужной строкой НАЧИНАЯ С ПЕРВОГО СИМВОЛА (т.е. функция правильно возвращает 1); Если ЧастьIDD заполнена частично сиволами идущими подряд слева направо - все корректно отлавливает потому что опять таки часть IDD совпадает с нужной строкой начиная с первого символа. Во всех остальных случаях часть IDD будет совпадать с нужной тебе строкой начиная с символов по номеру больших 1, а ты самолично выбрасываешь все эти возможности из нужной тебе выборки, когда делаешь условие:

Если Найти(Спр.IDD,СокрЛП(ЧастьIDD)) =  1 Тогда

Именно поэтому тебе и сказали в (7), что надо использовать условие:

Если Найти(Спр.IDD,СокрЛП(ЧастьIDD)) >  0 Тогда

Только этим условием ты не будешь отсекать все варианты, которые находятся посередине строки...
30 raykom
 
27.07.14
21:03
ДА уже понял