Имя: Пароль:
1C
1C 7.7
v7: Отбор по реквизиту.
0 progaoff
 
30.05.18
16:47
Делаю выборку элементов :
Спр.ВыбратьЭлементыПоРеквизиту("ВидОбъекта", Значение);
Возвращает 0. Хотя три элемента с значением в реквизите есть.
1 progaoff
 
30.05.18
16:47
Что я мог упустить?
2 progaoff
 
30.05.18
16:48
СпрОбъекты = СоздатьОбъект("Справочник.БП_ОбъектыНаОбслуживании");
            СпрОбъекты.ИспользоватьВладельца(ТекущийЭлемент());
            СправочникВидов = СоздатьОбъект("Справочник.БП_ВидыОбслуживаемыхОбъектов");
            РеквизитПоиска = СправочникВидов.НайтиПоНаименованию("Банковское оборудование");
            СпрОбъекты.ВыбратьЭлементыПоРеквизиту("ВидОбъекта",РеквизитПоиска,0,0);
            Пока СпрОбъекты.ПолучитьЭлемент() = 1 Цикл          
                Если СпрОбъекты.НаОбслуживании.Получить(ИспользоватьДату()) = 1 Тогда
                    ТабОбъектыБанк.НоваяСтрока();
                    Объектов = Объектов+1;
                    ТабОбъектыБанк.Ном = Объектов;
                    ТабОбъектыБанк.Объект = СпрОбъекты.ТекущийЭлемент();
                    ТабОбъектыБанк.СерийныйНомер = СпрОбъекты.СерийныйНомер.ЗаводскойНомер;
                    ТабОбъектыБанк.ДатаЗаменыЭКЛЗ =  СпрОбъекты.ДатаЗаменыЭКЛЗ.Получить(ТекущаяДата());
                    ТабОбъектыБанк.Подразделение  =  СпрОбъекты.Подразделение;
                    ОбслуживаемоеКоличество = ОбслуживаемоеКоличество + 1;
                    
                КонецЕсли;
               КонецЦикла;
3 bolder
 
30.05.18
16:48
(1) Реквизит должен индексироваться.
4 progaoff
 
30.05.18
16:49
(3) Сортировка включена на нем
5 bolder
 
30.05.18
16:53
(4) Значит что-то с Владельцем не так.
6 Злопчинский
 
30.05.18
16:55
попутно:  вот даже навскидку не скажу учитывает ли ВыбратьПоРеквизиту ограничение, установленное по ИспользоватьВладельца()...?
7 Злопчинский
 
30.05.18
16:56
Быдлокод детектед
РеквизитПоиска = СправочникВидов.НайтиПоНаименованию("Банковское оборудование");
8 Злопчинский
 
30.05.18
16:56
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
9 bolder
 
30.05.18
16:56
(6) Учитывает,однозначно.Поэтому в первую очередь надо проверить установку Владельца.
10 bolder
 
30.05.18
16:57
(8) А, ну конечно же)
11 Злопчинский
 
30.05.18
16:58
и даже не то быдлокод что РеквизитОбъекта - вообще то число (результат поиска успех=1, неуспех=0), а не объект/ссылка, а то быдлокод, что нигде после поиска не проверяется - найдено или нет.
гнать за такое ссаными тряпками из клюшечников в восьмерочники - галочки там расставлять
12 progaoff
 
30.05.18
16:59
Да это уже понял) убрал (7)
13 progaoff
 
30.05.18
17:00
и владельца исключил
14 bolder
 
30.05.18
17:00
(11) Там скорее наоборот,навыки 8-ки мешают писать правильный код на клюшках.
15 Злопчинский
 
30.05.18
17:00
Почему бы написать не мудачно, а нормально, по типу

            СправочникВидов = СоздатьОбъект("Справочник.БП_ВидыОбслуживаемыхОбъектов");
            РеквизитПоиска = СправочникВидов.НайтиПоНаименованию("Банковское оборудование");
//
СпрОбъекты = СоздатьОбъект("Справочник.БП_ОбъектыНаОбслуживании");
СпрОбъекты.ИспользоватьВладельца(ТекущийЭлемент());
СпрОбъекты.ВыбратьЭлементыПоРеквизиту("ВидОбъекта",РеквизитПоиска,0,0);
16 Злопчинский
 
30.05.18
17:01
(13) и каков результат..?
давай текущий код
17 bolder
 
30.05.18
17:01
(13) И?Не заработало?
18 progaoff
 
30.05.18
17:01
СпрОбъекты = СоздатьОбъект("Справочник.БП_ОбъектыНаОбслуживании");
            СпрОбъекты.ИспользоватьВладельца(ТекущийЭлемент());
            СправочникВидов = СоздатьОбъект("Справочник.БП_ВидыОбслуживаемыхОбъектов");
            РеквизитПоиска = СправочникВидов.НайтиПоНаименованию("Банковское оборудование");
            СпрОбъекты.ВыбратьЭлементыПоРеквизиту("ВидОбъекта",РеквизитПоиска,0,0);
19 progaoff
 
30.05.18
17:02
СпрОбъекты = СоздатьОбъект("Справочник.БП_ОбъектыНаОбслуживании");
            СправочникВидов = СоздатьОбъект("Справочник.БП_ВидыОбслуживаемыхОбъектов");
            РеквизитПоиска = СправочникВидов.НайтиПоНаименованию("Банковское оборудование");
            СпрОбъекты.ВыбратьЭлементыПоРеквизиту("ВидОбъекта",РеквизитПоиска,0,0);
            Пока СпрОбъекты.ПолучитьЭлемент() = 1 Цикл          
                Если СпрОбъекты.НаОбслуживании.Получить(ИспользоватьДату()) = 1 Тогда
                    ТабОбъектыБанк.НоваяСтрока();
                    Объектов = Объектов+1;
                    ТабОбъектыБанк.Ном = Объектов;
                    ТабОбъектыБанк.Объект = СпрОбъекты.ТекущийЭлемент();
                    ТабОбъектыБанк.СерийныйНомер = СпрОбъекты.СерийныйНомер.ЗаводскойНомер;
                    ТабОбъектыБанк.ДатаЗаменыЭКЛЗ =  СпрОбъекты.ДатаЗаменыЭКЛЗ.Получить(ТекущаяДата());
                    ТабОбъектыБанк.Подразделение  =  СпрОбъекты.Подразделение;
                    ОбслуживаемоеКоличество = ОбслуживаемоеКоличество + 1;
                    
                КонецЕсли;
               КонецЦикла;
20 bolder
 
30.05.18
17:02
(18) !!!! Ты ничего не понял, похоже...
21 bolder
 
30.05.18
17:04
(20) Реквизит поиска у тебя число будет!
22 progaoff
 
30.05.18
17:05
ВыбратьЭлементыПоРеквизиту - "Строка с именем реквизита" -так?
23 Злопчинский
 
30.05.18
17:05
(21) они ж - как дети...
24 progaoff
 
30.05.18
17:06
ВыбратьЭлементыПоРеквизиту("ИмяРеквизита", "Значение"); ?
25 bolder
 
30.05.18
17:08
(22) Злоп же уже все разжевал...Наитий по наименованию вернёт 1 если есть.А Рекизит поиска надо уже по текущему объекту выставить СправочникВидов.Текщийэлемент().
26 Злопчинский
 
30.05.18
17:10
как-то так


СправочникВидов = СоздатьОбъект("Справочник.БП_ВидыОбслуживаемыхОбъектов");
Если СправочникВидов.НайтиПоНаименованию("Банковское оборудование")=0 Тогда Возврат; КонецЕсли;
РеквизитПоиска = СправочникВидов.ТекущийЭлемент();

СпрОбъекты = СоздатьОбъект("Справочник.БП_ОбъектыНаОбслуживании");
СпрОбъекты.ИспользоватьВладельца(ТекущийЭлемент());

СпрОбъекты.ВыбратьЭлементыПоРеквизиту("ВидОбъекта",РеквизитПоиска,0,0);
Пока СпрОбъекты.ПолучитьЭлемент() = 1 Цикл          
    Если СпрОбъекты.НаОбслуживании.Получить(ИспользоватьДату()) = 0 Тогда Продолжить; КонецЕсли;
    ТабОбъектыБанк.НоваяСтрока();
    Объектов = Объектов+1;
    ТабОбъектыБанк.Ном = Объектов; //мутный смысл нумерации
    ТабОбъектыБанк.Объект = СпрОбъекты.ТекущийЭлемент();
    ТабОбъектыБанк.СерийныйНомер = СпрОбъекты.СерийныйНомер.ЗаводскойНомер;
    ТабОбъектыБанк.ДатаЗаменыЭКЛЗ =  СпрОбъекты.ДатаЗаменыЭКЛЗ.Получить(ТекущаяДата());
    ТабОбъектыБанк.Подразделение  =  СпрОбъекты.Подразделение;
    ОбслуживаемоеКоличество = ОбслуживаемоеКоличество + 1;
КонецЦикла;
27 Злопчинский
 
30.05.18
17:10
(22) ЧИТАТЬ СП! ВНИМАТЕЛЬНО!
28 progaoff
 
30.05.18
17:10
Моя все поняла, работает) Спасибо