Имя: Пароль:
1C
1С v8
СокрЛП Лыжи Пятница
0 EugeneSemyonov
 
11.04.14
13:00
Всем доброго дня!

Есть код:
НовыйДок= Документы.ТехнологическаяКарта.СоздатьДокумент();
НовыйДок.Дата= Выборка.Дата;
НовыйДок.Номер= СокрЛП(Выборка.Номер);

В выборке номер выглядит во так "К/БЛ/464/5     " (без кавычек, но с пробелами в конце). В отладке смотрю значение СокрЛП(Выборка.Номер) - "К/БЛ/464/5".
Почему в итоге после выполнения "НовыйДок.Номер= СокрЛП(Выборка.Номер);" НовыйДок.Номер имеет значение "К/БЛ/464/5     "? Пятница? Вообще-то я этот код ещё в четверг написал.
1 jsmith82
 
11.04.14
13:01
фиксированная длина
2 Ненавижу 1С
 
гуру
11.04.14
13:05
у номера фиксированная длина строки
3 Maxus43
 
11.04.14
13:06
про длину номера уже говорили?
4 EugeneSemyonov
 
11.04.14
13:06
Не вижу где можно отменить фиксированную длину.
В свойствах документа:
Автонумерация=Истина
Нумератор=""
Длина номера=15
Контроль уникальности=Истина
Тип номера=Строка
Периодичность=Непериодический
5 EugeneSemyonov
 
11.04.14
13:07
Тупо длина номера=0 ?
6 Ненавижу 1С
 
гуру
11.04.14
13:08
(4) нельзя ее отменить
7 Starhan
 
11.04.14
13:10
(0) Возьми 1 ряд в грохотке и потренеруйся, возможно ты кинестетик.
8 EugeneSemyonov
 
11.04.14
13:10
(4) тогда я тоже Ненавижу 1С!
9 EugeneSemyonov
 
11.04.14
13:11
Опечатался (6) тогда я тоже Ненавижу 1С!
10 Ненавижу 1С
 
гуру
11.04.14
13:11
(8) это не повод, пот пустые ссылки, это да
скажи, что тебе мешает в номере?
11 EugeneSemyonov
 
11.04.14
13:16
Мне по номеру искать и сравнивать приходится. Хотел отсечь незначащее, на всякий случай.
Сейчас вот придумал случай - в исходной базе, в которой формируется выборка, меняется длина этого самого номера... и понеслась дублирующая загрузка...

Сейчас уже понимаю что ну и фиг с ним - будем решать вопросы по мере поступления.

Всем спасибо! Отдельное спасибо Ненавижу 1С.
12 Maxus43
 
11.04.14
13:18
(11) почему ни у кого нет проблем с поиском по номеру, а у тебя есть?
13 EugeneSemyonov
 
11.04.14
13:20
Вообще даже шаблон мне порвало когда я записал
НовыйДок.Номер= СокрЛП(Выборка.Номер);
А при следующем запуске
ДокСсылка=Документы.ТехнологическаяКарта.НайтиПоНомеру("Номер", СокрЛП(Выборка.Номер)); - дулюшка, т.е. ложь.
14 EugeneSemyonov
 
11.04.14
13:20
т.е. пустая ссылка.
15 Мимохожий Однако
 
11.04.14
13:28
Фигней занимаешься. Ищи через запрос в котором можно использовать подобно.
16 Bigbro
 
11.04.14
13:30
конечно не найдешь ты ищешь по номеру а в качестве значения для поиска указываешь только часть номера.
17 AndyD
 
11.04.14
13:37
(13) тебе религия запрещает в запросе, которым ты получаешь номер (Выборка.Номер) - сразу получать еще и ссылку на документ?
18 ptiz
 
11.04.14
13:47
Точно лыжи....
19 EugeneSemyonov
 
11.04.14
14:25
(16) это я уже понял. спасибо.
(17) а для чего ссылку получать? Я гружу данные из одной базы в другую по OLE. Выбираю запросом и при необходимости создаю и заполняю свойства объекта из выборки. Чем мне поможет ссылка?
20 EugeneSemyonov
 
11.04.14
14:30
(15) Дельный совет! Спасибо, Александр!
21 EugeneSemyonov
 
11.04.14
14:50
(15) Хотя тогда возможно придётся обрабатывать многострочную выборку, если искать, например, "К/БЛ/464/1" в то время когда существуют документы с номерами "К/БЛ/464/10", "К/БЛ/464/11" и т.д. А такие документы существуют.
22 EugeneSemyonov
 
11.04.14
14:55
(7) Виктор, вы о чём?
23 EugeneSemyonov
 
11.04.14
15:03
(12) Максим, видать я немного излишне заморочился.
Хотя возможные проблемы в будущем весьма реальны. Если мне не изменяет память, годика 3 назад я длину этого номера уже увеличивал.
24 jsmith82
 
11.04.14
15:28
Лыжи не забывай смазывать
25 Torquader
 
11.04.14
15:42
Читать внимательно в google "строка фиксированной длины".
26 dmpl
 
11.04.14
15:55
(13) Ну и дополни до нужной длины. В чем проблема?
27 EugeneSemyonov
 
11.04.14
15:58
(24) спасибо!
(25) пятница. не могу!
(26) в базах реквизиты идентичны и пока не критично - обойдусь без СокрЛП.
28 dmpl
 
11.04.14
16:01
(27) Вообще, почему бы не использовать одинаковые уникальные идентификаторы для одинаковых объектов в разных базах? Зачем по номеру сопоставлять? Юзер же его поменять может...
29 Torquader
 
11.04.14
16:13
(28) Хочется человеку, чтобы сопоставлялось по номерам - в частности, пользователь действительно может поменять номер, чем изменить соответствие, а что делать в случае GUID-а - его-то поменять нельзя.
30 dmpl
 
11.04.14
16:19
(29) А зачем его менять? Он же никакой человекочитаемой информации не несет, просто идентифицирует объект. А на крайний случай есть замена значений.
31 Torquader
 
11.04.14
16:25
(30) Вот поэтому и используют номер, чтобы даже самый последний пользователь понимал, какая связь между двумя документами в двух разных базах.
32 EugeneSemyonov
 
11.04.14
16:59
В нашем случае номер несёт человекочитаемую информацию - в номере закодировано место производства, а так же версия технологической карты.
33 EugeneSemyonov
 
11.04.14
17:02
Пятница подходит к концу: я убрал СокрЛП, а код
ДокСсылка=Документы.ТехнологическаяКарта.НайтиПоНомеру("Номер", Выборка.Номер);
всё равно возвращает пустую ссылку, хотя документы с абсолютно идентичными, на мой взгляд, номерами есть! :( Такие номера же с пробелами на конце по 15 символов длиной... :(
34 Torquader
 
11.04.14
17:04
окументы.ТехнологическаяКарта.НайтиПоНомеру("Номер", Выборка.Номер);

Чего это такое ?
35 Torquader
 
11.04.14
17:06
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоНомеру (FindByNumber)
Синтаксис:

НайтиПоНомеру(<НомерДокумента>, <ДатаИнтервала>)
Параметры:

<НомерДокумента> (обязательный)

Тип: Число; Строка. Номер искомого документа. Тип передаваемого значения зависит от установки в конфигураторе представления номера документа.
<ДатаИнтервала> (необязательный)

Тип: Дата. Дата из интервала, в котором проводится поиск по номеру. Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Параметр используется для документов с периодической нумерацией.
Возвращаемое значение:

Тип: ДокументСсылка.<Имя документа>; Неопределено. Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
Если номер не задан (длина = 0), то будет возвращено Неопределено.
Описание:

Осуществляет поиск документа по номеру.

Доступность:

Сервер, толстый клиент, внешнее соединение.
36 EugeneSemyonov
 
11.04.14
17:07
Ой. Пятницооо... Лы-жи.
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоНомеру (FindByNumber)
Синтаксис:

НайтиПоНомеру(<НомерДокумента>, <ДатаИнтервала>)
37 Torquader
 
11.04.14
17:07
P.S. если бы 1С была умнее, то она бы вам задницу на экране нарисовала - а она - ищет то, чего не может быть.
38 EugeneSemyonov
 
11.04.14
17:07
Сейчас попробую:
ДокСсылка=Документы.ТехнологическаяКарта.НайтиПоНомеру(Выборка.Номер);
39 Torquader
 
11.04.14
17:08
(36) Это лыжи, в которые, как в ёжика, гвоздей назабивали и в них пытаются ехать.
40 EugeneSemyonov
 
11.04.14
17:15
(39) Спасибо, Torquader!!! Реально натолкнул на решение (я уже сам открыл описание в синтаксис-помощнике и понял свою ошибку после (34)). Да ещё и носом ткнул - на форум выложил.
41 Torquader
 
11.04.14
17:18
(40) На будущее - внимательно смотрим передаваемые в стандартные функции параметры - тот, кто спешит, едет в ежовых лыжах по бетонной дороге.
42 EugeneSemyonov
 
11.04.14
17:25
(41) Да, ещё раз спасибо! Иной раз в блокноте код напишешь и он без отладки работает, а иной раз в пятницу и отладка не помогает :)
43 Torquader
 
11.04.14
17:25
(42) Так отвлекают, наверное, коллеги по работе.
44 EugeneSemyonov
 
11.04.14
17:33
(43) Немного. Когда задача или проблема интересная, то внимания на коллег не хватает и они фильтруются.
45 Torquader
 
11.04.14
17:33
(44) Судя по данной задаче - она оказалась не очень интересной.
46 EugeneSemyonov
 
11.04.14
17:35
(45) Ну почему. Интересной. Особенно такой вызов. Оказалось вызов вниманию.
47 Torquader
 
11.04.14
17:36
Это, кстати, ещё один камень в огород отсутствия типизации, так как в случае строгого задания типов ошибка была бы ещё на стадии компиляции данного кода.
48 dmpl
 
11.04.14
22:45
(31) А теперь ты попробуй ему объяснить, почему он в одной базе номер поменял - и документ в другой задублировался ;)
49 Torquader
 
11.04.14
22:50
(48) Это объяснить проще, чем потом объяснять, как документы связываются по внутреннему идентификатору.
Просто - сообразительные понимают и не косячат, а дураки - они всегда найдут способ навредить.
50 dmpl
 
12.04.14
09:26
(49) А зачем объяснять как? Пользователю это не интересно. Достаточно сказать, что система знает, какой документ соответствует какому в другой базе, и что бы ты ни делал - она все равно будет знать. Дублирование в другой базе - это косяк программиста.
51 Torquader
 
12.04.14
23:56
(50) Потом этот чудик удалит документ и создаст новый с таким же номером и заполнением, а система его не посчитает совпадающим - и тоже создаст новый.
P.S. у меня уже такое было - пользователь каждый раз удалял документ, когда система создавала новый.
52 dmpl
 
12.04.14
23:59
(51) Правильная система удалит документ вслед за пользователем, и все будет нормально. Впрочем, пользователь, удаляющий документы - это из серии бардака в правах.
53 Torquader
 
13.04.14
00:11
(52) А если это бухгалтер, и он "наводит порядок" в базе.
Если что-то работает так, что он не понял, то потом за все расхождения баланса уже отвечают программисты.
У меня для некоторых "проставление галочек" реализовано - то есть при загрузке система показывает все создаваемые и измеряемые ей документы, а пользователь проставляет галочку в согласие с изменениями - зато - за всё, что в базе не так - "вазелин для пользователя!".
54 dmpl
 
13.04.14
00:21
(53) Ну удалил - значит удалил. Сам виноват.

А галочки проставлять можно только при небольшом объеме изменений, в противном случае полезут ошибки пользователя.
55 Torquader
 
13.04.14
14:57
(54) Так это уже проблемы пользователей.
Можно и вообще - всё руками переносить - галочки-то явно быстрее.