Имя: Пароль:
1C
 
Конвертация данных + запрос 7.7
,
0 Wefast
 
15.05.19
08:29
Есть справочник Номенклатура, есть справочник НормыТруда(спецификация)

В справочнике нормы труда есть реквизит Ном(НОМЕНКЛАТУРА)

Мне известна эта номенклатура и ном

Мне нужно узнать найти спецификацию у которой ном = моя ном, и подчинена моей номенклатуре
Она точно есть

Пишу:

                            Запрос = СоздатьОбъект("Запрос");
                            ТекстЗапроса =
                            "//{{ЗАПРОС(Сформировать)
                            |Родитель = Справочник.НормыРасходов.Родитель;
                            |НормыРасходов = Справочник.НормыРасходов.ТекущийЭлемент;
                            |Элемент = Справочник.НормыРасходов.Элемент;
                            |Группировка НормыРасходов;
                            |Условие(НормыРасходов.Владелец= ВхИзд);
                            |Условие(Элемент = Источник);
                            |";
                            ;

                                


Источник - моя номенклатура, владелец справочника
ВхИзд - моя Ном, реквизит справочника нормы расходов

Запрос выдает пустой результат.

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

Может я пишу что не так?

Запрос кстати вечность выполняется.
1 Wefast
 
15.05.19
08:39
НР2 = СоздатьОбъект("Справочник.НормыРасходов");
                        НР2.ИспользоватьВладельца(НР.ТекущийЭлемент().Элемент);
                        Если НР2.НайтиПоРеквизиту("Элемент",ВхИзд,0) = 1 Тогда
                            я=0;
                        КонецЕсли;

тут я перепутал на самом деле ВхИзд и НР.ТекущийЭлемент().Элемент
Но сути это не поменяло
2 Wefast
 
15.05.19
09:11
https://is.gd/obbB91

вот скрин справочников.
слева справочник Номенклатура. По нажатию кнопки "Нормативы" открывается справочник Нормы расходов с отбором по владельцу(Номенклатура)

Там есть реквизит Элемент. Тип Номенклатура

Вот у меня есть этот Элемент и владелец-номенклатура

Мне нужно получить элемент справочника Нормы расходов по этим 2 реквизитам
3 Ёпрст
 
15.05.19
09:22
(0) выкинуть из кода везде текущийэлемент()
(2) п..ц, даже из картинки видно, что реквизит Элемент имеет тип НЕ справочник.номенклатура
4 Wefast
 
15.05.19
09:29
(3) по второму пункту https://is.gd/YiqF8F
5 Wefast
 
15.05.19
10:00
"//{{ЗАПРОС(Сформировать1)
    |Без итогов;
    |НормыРасходов = Справочник.НормыРасходов.ТекущийЭлемент;
    |Владелец = Справочник.НормыРасходов.Владелец;
    |Элемент = Справочник.НормыРасходов.Элемент;
    |Группировка Элемент;
    |Условие(Элемент = Элем);
    |Условие(Владелец = Ном);
    |"//}}ЗАПРОС
    
Вот собрал такой вариант, работает, но очень долго

Куда быстрее сделать выборку по реквизиту, без учета владельца, а потом условие сделать

Вот так работает раз в 10 быстрее:
    НР2 = СоздатьОбъект("Справочник.НормыРасходов");
    НР2.ВыбратьЭлементыПоРеквизиту("Элемент",Элем,0,0);
    
    Пока НР2.ПолучитьЭлемент()=1 Цикл
        Если НР2.Владелец = Ном Тогда
            Сообщить("ок");
        КонецЕсли;
    КонецЦикла;
6 Ёпрст
 
15.05.19
10:24
(4) биомать а ? Открой ты пофигуратор и посмотри тип реквизита.
7 Ёпрст
 
15.05.19
10:26
(5) есть найтиПоРеквизиту, будет еще быстрее, чем выборка
8 Wefast
 
15.05.19
10:31
(6) (7) Я в условие после выборки подсовываю НОМЕНКЛАТУРУ и оно срабатывает.
в конфигураторе, просто тип "справочник"
НайтиПоРеквезиту без указания владельца выдает не то что надо, а с владельцем не работает - о чем я писал в (0)
9 Ёпрст
 
15.05.19
10:45
(8) в (0) вообще г..о код
10 Ёпрст
 
15.05.19
10:45
где вас учат писать так ?
НР.ТекущийЭлемент().Элемент ?
11 Ёпрст
 
15.05.19
10:47
И так, чего, не работает у вас, разве ?



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

12 Ёпрст
 
15.05.19
10:49
точнее, так:



НР2 = СоздатьОбъект("Справочник.НормыРасходов");
НР2.ИспользоватьВладельца(Ном);
Если НР2.НайтиПоРеквизиту("Элемент",Элем,0) =1 Тогда
      Сообщить("ок");
КонецЕсли;
13 Wefast
 
16.05.19
13:09
(9) (10) на 7 никто не учил. Приходится код писать на нем раз в год.

(12) так не работает. Не знаю почему

А вот так работает:
    НР2 = СоздатьОбъект("Справочник.НормыРасходов");
    НР2.ВыбратьЭлементыПоРеквизиту("Элемент",Элем,0,0);              
    
    Пока НР2.ПолучитьЭлемент()=1 Цикл
        Если НР2.Владелец = Ном Тогда
            Сообщить("ок");
        КонецЕсли;
    КонецЦикла;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан