Имя: Пароль:
1C
1С v8
Ошибка в номенклатуре при поиске товара по цене
0 pnamik
 
05.04.15
16:12
8.0.18.2, самописная конфа

В номенклатуре после поиска по цене открывается форма
http://prntscr.com/6pu19y

После нажатия "закрыть" или нажатия на верхнем углу этой формы крестика поялвется ошибка

http://prntscr.com/6pu1u9

{Справочник.Номенклатура.Форма.ФормаСписка(338)}: Значение не является значением объектного типа (Пустая)
    Если спрН.Пустая() = Ложь Тогда

код

Процедура кнПоискПоЦенеНажатие(Элемент)
    ПараметрПередачи = "Поиск товара по цене";
    Обработка = Обработки.ДиалогВводаЦены.ПолучитьФорму("Форма");
    Обработка.ОткрытьМодально();
    ВыбЦена = ПараметрПередачи;
    ПараметрПередачи = ВыбЦена;
    Обработка = Обработки.ТоварыПоЦене.ПолучитьФорму("Форма");
    Обработка.ОткрытьМодально();
    спрН = ПараметрПередачи;
    ПараметрПередачи = "";
    Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
    Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
    КонецЕсли;
КонецПроцедуры

Подскажите, подалуйста, как лечить?
1 ДенисЧ
 
05.04.15
16:24
А с каких пор у строки появились методы, вызываемые через точку?
2 ДенисЧ
 
05.04.15
16:24
ВыбЦена = ПараметрПередачи;
    ПараметрПередачи = ВыбЦена;


А это вообще гениально... Прямо как в Одесе на Привозе...
3 pnamik
 
05.04.15
16:28
(2) слова и музыка не мои. я бы "не осмелился" на такое.
А подсказка?
4 ДенисЧ
 
05.04.15
16:29
(3) Подказываю - пробуди в себе самосознание русского программиста и перепиши всё с нуля.
5 pnamik
 
05.04.15
16:31
(4) это очень долго. Просил помощь в решении конкретной проблемы
6 pnamik
 
05.04.15
16:35
так можно всю конфу переписать. у каждого программиста свой взгляд. тот, кто писал эту ... может был начинающий, или прыгнулна 8 с 7.7
7 Kookish
 
05.04.15
17:41
(5) В решении одной конкретной проблемы помощь попросишь, потом другой, потом третья вылезет... Не быстрее ли будет самому уже научиться. Думаешь, после таких перлов одним косяком дело ограничится?
8 D_E_S_131
 
05.04.15
17:49
"я бы "не осмелился" на такое." — судя по вопросу, очень сомнительно, что это не твой код.
9 mehfk
 
05.04.15
17:51
>> может был начинающий, или прыгнулна 8 с 7.7
Скорее всего он был полный "0".
10 pnamik
 
05.04.15
18:05
(8) я писать пока не умею
11 pnamik
 
05.04.15
18:06
(9) ты погорячился. нулевой не мог писать вполне работающую конфу
12 D_E_S_131
 
05.04.15
18:09
(10) Эээ, а тогда почему тебя попросили решить этот вопрос? Или теперь суть IT-специалиста сводится к тому, что бы найти нужный форум и на нем обозначить задачу?
13 pnamik
 
05.04.15
18:11
(7) я бы с большим удовольствием. времени не могу уделить полноценно. и не могу найти учебный курс. есть по инету курсы разные, выбирать среди них не могу, не хочу на полпути остановиться из-за неправильной подачи материала в середине курса, например.

ну что, по поводу помощи? Есть смелые и отзывчивые?
14 pnamik
 
05.04.15
18:11
(10) потому что нет специалиста, очень просто
15 pnamik
 
05.04.15
18:12
(14) перенаправить к (12)
16 pnamik
 
05.04.15
18:13
(12) это мелкие ошибки которые иногда вылезает, и остались в наследство от программиста. серьезные дела (отчеты, обработки) естестсвенно, делается по-другому
17 mehfk
 
05.04.15
19:05
(14) Накопи денег и пригласи.
18 pnamik
 
05.04.15
19:41
(17) какой ты умный
19 D_E_S_131
 
05.04.15
19:46
(14) Так надо его усиленно искать, а не на форумах сидеть.
20 pnamik
 
05.04.15
19:59
(19) из-за мелкой ошибки держать 1С программера???
21 pnamik
 
05.04.15
20:00
(19) на форумах не сижу. а вот, ты точно сидишь
22 pnamik
 
05.04.15
20:09
(19) вместо того чтобы помочь
23 DmitriyDI
 
05.04.15
20:11
(22) да ты просто не понимаешь! в (0) написана ересь, она не может в принципе работать) вот поэтому тебе и говорят, что делать!
24 mehfk
 
05.04.15
20:12
25 pnamik
 
05.04.15
20:22
(24) кто уполномочил тебя?
26 pnamik
 
05.04.15
20:23
(23) поиск прекрасно работает, просто при закрытии формы дает вышеуказанную ошибку, которая никак не влияет на работу поиска. ошибка раздражает, потому и прошу помочь.
27 DmitriyDI
 
05.04.15
21:17
(26)  Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
    Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
    КонецЕсли;

закомментируй используя //
28 pnamik
 
05.04.15
21:24
(27) закомментировал


Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
    Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
    КонецЕсли;


ошибка соответственно исчезла, но
поиск по цене находит товары, например по 390 руб, список появляется, но среди появившиеся товаров невозможно выбирать нужный товар (бездействие)


http://prntscr.com/6pxzo7
29 DmitriyDI
 
05.04.15
21:27
(28) попробуй тогда вместо  спрН.Пустая() = Ложь,  ЗначениеЗаполнено(СпрН)
30 pnamik
 
05.04.15
21:31
(29) у меня 8.0.18.2, такие функции не проходят.
31 DmitriyDI
 
05.04.15
21:38
(30) я понял

ТипЗначения = ТипЗнч(спрН);

// тут смотришь какой тип значения при ошибке (в отладчике), если нул или неопределено то сразу без типа значения проверку на них

Если ТипЗначения = Тип("") Тогда // тут проверяешь если не тот тип, выходим, иначе идем дальше
возврат;
КонецЕсли;

Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
    Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
    КонецЕсли;
32 pnamik
 
05.04.15
21:38
Добавил в общую модуль функцию ЗначениеЗаполнено, и по совету (29) заменил, появилась новая ошибка

{Справочник.Номенклатура.Форма.ФормаСписка(339)}: Значение не является значением объектного типа (Ссылка)
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
33 ДенисЧ
 
05.04.15
21:41
ЗначениеНеЗаполнено() для 8.0 вроде как.
Да и вообще - через попытку ещё пока не сажают...
34 pnamik
 
05.04.15
21:42
(33) я так и делал конечно функция ЗначениеНеЗаполнено(), но ошибка
35 DmitriyDI
 
05.04.15
21:44
попробуй так, я просто хз что там принимает спрН, наверное строку

ТипЗначения = ТипЗнч(спрН);

Если ТипЗначения = Тип("Строка") Тогда
возврат;
КонецЕсли;

Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
КонецЕсли;
36 pnamik
 
05.04.15
21:48
(35) ошибка

{Справочник.Номенклатура.Форма.ФормаСписка(346)}: Значение не является значением объектного типа (Пустая)
    Если спрН.Пустая() = Ложь Тогда
37 pnamik
 
05.04.15
21:49
Может в этом направлении подумать


Попытка
            Рез = ПараметрПередачи.ВыбЦена;
        Исключение
                    КонецПопытки;
38 pnamik
 
05.04.15
21:50
(37) также ошибка


{Справочник.Номенклатура.Форма.ФормаСписка(344)}: Значение не является значением объектного типа (Пустая)
    Если спрН.Пустая() = Ложь Тогда
39 ccskn
 
05.04.15
21:50
ВыбЦена = ПараметрПередачи;
    ПараметрПередачи = ВыбЦена;

Гениально :)))
Автор, у вас строка, а вы в строке ссылку ищите...
40 DmitriyDI
 
05.04.15
21:52
(39) там не строка)
Попытка
Если спрН.Пустая() = Ложь Тогда
        ЭлементыФормы.СправочникСписок.ТекущаяСтрока = спрН.Ссылка;
Иначе    
        Предупреждение("Товар с ценой "+Строка(ВыбЦена)+" не найден!");
КонецЕсли;
Исключение
КонецПопытки;

не правильно конечно) но если отладчиком пользоваться не умеем)
41 pnamik
 
05.04.15
21:53
(39) подскажите, как по другому? и кстати, я не автор.
42 hhhh
 
05.04.15
21:53
ПараметрПередачи = Обработка.ОткрытьМодально()
43 ccskn
 
05.04.15
21:55
как это не строка, когда "спрН =ПараметрПередачи"
Строка со значением "Поиск товара по цене" там будет...
44 DmitriyDI
 
05.04.15
21:57
(43) тогда почему код из (35) не работает?
45 pnamik
 
05.04.15
22:01
в (35) в отладчике (останавливаться по ошибке) выдает ошибку

ошибка времени выполнения на строке 344 Если спрН.Пустая() = Ложь Тогда
46 DmitriyDI
 
05.04.15
22:01
да сделай как в (40) написано
47 pnamik
 
05.04.15
22:05
(40) и (46) ошибка исчезла, и находит товары и переходит в номенклатуру в нужную позицию как и раньше
48 pnamik
 
05.04.15
22:06
(46) спасибо за реальную помощь. Здоровья тебе и семье!
49 ccskn
 
05.04.15
22:09
(46) а чем это от простого комментирования строк отличается?)))
Он же не зря, видимо формы модально открывает, только вот полученное значение никуда не присваивает... А оно по видимому как раз в переменную спрН должно попасть :)
50 pnamik
 
05.04.15
22:19
(49) не знаю почему сам (40) говорит, что это неправильно, но это работает, и это не равно закоммент, см. (28)
51 Ma3eIIa
 
05.04.15
22:21
(49) может где открываем форму заполняем этот параметр. есть такие умельцы.
52 DmitriyDI
 
05.04.15
22:24
(49) да я тоже так думал но тут глобальная переменная видимо задействована

кстати при открыть модально, если не выбираем то он по моему "неопределенно" возвращает (соответсвенно проверку на него и делать), проще всего посмотреть в отладчике на что проверять, так как я не могу посмотреть, используем попытку, в случае выбора код должен отрабатывать, так как в спрН - ссылка, ну а в случае закрытия ничего не делать.
53 ccskn
 
05.04.15
22:27
Там явно напрашивается в обоих случаях ПараметрПередачи = обработка.открытьмодально()
Но это уже выше вроде написали... :)
Мне всё равно теперь будет снится
ВыбЦена = ПараметрПередачи;
ПараметрПередачи = ВыбЦена;
54 ccskn
 
05.04.15
22:27
'СнитЬся
55 pnamik
 
05.04.15
22:56
(53) обе случаи какие?
эти два

ВыбЦена = ПараметрПередачи;
ПараметрПередачи = ВыбЦена;

предлагаете заменить

одной строкой
ПараметрПередачи = Обработка.ОткрытьМодально()?
56 Ma3eIIa
 
05.04.15
23:13
нет. ПараметрПередачи где объявление ? она глобальная ?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.