Имя: Пароль:
1C
1С v8
Не находит элемент справочника по коду
,
0 21stas
 
08.07.16
09:48
ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.НайтиПоКоду(ИнвНомер,,,);
            Если ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.ПустаяСсылка() Тогда
                Если ЗначениеЗаполнено(ИнвНомер) Тогда
                    НовыйИнвНомер          = Справочники.ИнвентарныеНомераОС.СоздатьЭлемент();
                    НовыйИнвНомер.ОС       = ТекСтрокаОсновныеСредства.ОС;
                    НовыйИнвНомер.Владелец = ТекУчреждение;
                    НовыйИнвНомер.Код      = СокрЛП(ИнвНомер);
                    Попытка
                        НовыйИнвНомер.Записать();
                    Исключение
                        Сообщить("Ошибка при записи инв.номера"+НовыйИнвНомер.Код);
                    КонецПопытки;

Не находит инвентарный номер по коду (хотя он есть), при этом записать не может (так как с таким кодом уже есть).
Выглядит инвентарный номер так: "166666                 "
Тестировал и в конфигураторе, и chdbfl - не помогло.
Что с ним?
1 Nuobu
 
08.07.16
09:49
СокрЛП
2 21stas
 
08.07.16
10:00
Оно так и было, но на всякий случай перепроверил - так тоже не работает:
            ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.НайтиПоКоду(ИнвНомер,,,);
            Если ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.ПустаяСсылка() Тогда
                Если ЗначениеЗаполнено(ИнвНомер) Тогда
                    НовыйИнвНомер          = Справочники.ИнвентарныеНомераОС.СоздатьЭлемент();
                    НовыйИнвНомер.ОС       = ТекСтрокаОсновныеСредства.ОС;
                    НовыйИнвНомер.Владелец = ТекУчреждение;
                    НовыйИнвНомер.Код      = ИнвНомер;
                    Попытка
                        НовыйИнвНомер.Записать();
                    Исключение
                        Сообщить("Ошибка при записи инв.номера"+НовыйИнвНомер.Код);
                    КонецПопытки;
3 21stas
 
08.07.16
10:01
БГУ 1
Уникальность справочника - в пределах подчинения владельцу
4 Euguln
 
08.07.16
10:05
(3) А в синтаксис помощнике почитать описание метода НайтиПоКоду не судьба?
5 Зая Бусечка
 
08.07.16
10:06
Выглядит инвентарный номер так: "166666                 "

Как бы очевидна причина, не?
6 Nuobu
 
08.07.16
10:07
(2) Оба раза пропиши СокрЛП.
7 HardBall
 
08.07.16
10:09
Тип кода какой? Строка,число?
8 21stas
 
08.07.16
10:15
Тип кода - строка
9 VladZ
 
08.07.16
10:17
(0)  Тут все дело в "666". Это число дьявола. Пока не изменишь цифры - проблему не решишь. Аминь!
10 Jonny_Khomich
 
08.07.16
10:20
(9) админь
11 21stas
 
08.07.16
10:49
(6) С СокрЛП() тоже не прокатывает:
            ИнвНомер=СокрЛП(ИнвНомер);
            ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.НайтиПоКоду(ИнвНомер,,,);
            Если ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.ПустаяСсылка() Тогда
                Если ЗначениеЗаполнено(ИнвНомер) Тогда
                    НовыйИнвНомер          = Справочники.ИнвентарныеНомераОС.СоздатьЭлемент();
                    НовыйИнвНомер.ОС       = ТекСтрокаОсновныеСредства.ОС;
                    НовыйИнвНомер.Владелец = ТекУчреждение;
                    НовыйИнвНомер.Код      = ИнвНомер;
                    Попытка
                        НовыйИнвНомер.Записать();
                    Исключение
                        Сообщить("Ошибка при записи инв.номера"+НовыйИнвНомер.Код);
                    КонецПопытки;
12 Jonny_Khomich
 
08.07.16
10:50
(11) значит не в том реквизите ищешь
13 Lexey_
 
08.07.16
10:52
(11) про отладчик слышал что-нибудь?
14 Azverin
 
08.07.16
10:53
жаль сегодня не пятница 13...
15 ВРедная
 
08.07.16
11:00
(11) как у тебя заполняется ИнвНмер?
16 ВРедная
 
08.07.16
11:02
+(15) и какой у него тип - строка или число?
17 PLUT
 
08.07.16
11:09
(0) кури ПолучитьСсылку()
18 21stas
 
08.07.16
11:52
(17) Курил. Не понял, как это может помочь
19 21stas
 
08.07.16
11:54
(18) ПолучитьСсылку() может мне дать ссылку по ID. Но где взять ID?
20 21stas
 
08.07.16
12:45
(13) Конечно, я начинаю с отладчика, а не с вовлечения сообщества. Но отладчик ничего не дал.
21 vmv
 
08.07.16
12:48
возможно инвентарный номер это реквизит элемента

т.е. код имеет другое значение
22 21stas
 
08.07.16
12:59
(21) Посмотрел форму списка - используется именно код, то есть уже есть элемент с таким кодом. Но он не находится.
И, так как он уже есть, новый элемент не записывается.
23 catena
 
08.07.16
12:59
(20)Покажи значение ИнвНомер в отладчике после строки поиска.
24 1dvd
 
08.07.16
13:03
ИнвНомерЭлемент = Справочники.ИнвентарныеНомераОС.НайтиПоКоду(СокрЛП(ИнвНомер),,,);
25 21stas
 
08.07.16
13:06
26 21stas
 
08.07.16
13:07
(24) Пробовал, например (11)
27 catena
 
08.07.16
13:07
(25)Ну и что ты врал, что пробелы убирал?
28 Lexey_
 
08.07.16
13:08
(26) сравнивал с тем, что в базе есть? количество пробелов разное, поди?
29 21stas
 
08.07.16
13:08
(27) Убирал, потом возвращал.
Давай снова уберу.
30 catena
 
08.07.16
13:09
+(25)И в исключение допиши Сообщить(ОписаниеОшибки())
31 21stas
 
08.07.16
13:09
<перерыв>
32 Lexey_
 
08.07.16
13:10
+(28) если так, то запросом ищи ПОДОБНО
33 1dvd
 
08.07.16
13:25
(26) Это совсем не то. Одно дело отрезать пробелы и получить уже обрезанную строку. Другое дело - пытаться обрезать строку и пихнуть её в элемент формы фиксированной длины, где она тут же дополняется пробелами
34 VladZ
 
08.07.16
13:31
Шайтан-арба....  Убери пробелы в коде элемента.
35 HardBall
 
08.07.16
15:00
(33) У элементов справочника убери пробелы в коде.
36 polosov
 
08.07.16
15:08
Бывает некоторые наркоманы преобразовывают число в строку и не учитывают особенность преобразования 1Ской числа в строку.
Например Строка(1000) = "1 000"
Не эта ли проблема?
37 21stas
 
10.07.16
13:43
Помогло (30) - добавил Сообщить(ОписаниеОшибки()) - и понял, что ошибка генерируется в модуле менеджера справочника. Там в модуле справочника и была разгадка - если у ОС не групповой учёт, то второй инвентарный номер добавлять не даёт.
А сообщение об ошибке в модуле менеджера справочника было закомментировано (уж не знаю, кем и зачем).
Всем спасибо.