Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как найти в таблице в справочнике нужную ссылку

Как найти в таблице в справочнике нужную ссылку
Я
   apdate by
 
28.06.21 - 12:16
Всем привет!

Имеем справочник в нем таблица в таблице одна колонка "Группа"

далее имеем цикл по товарам мне нужно ка кто быстро проверить нету ли родителя в таблице справочника что выше?

как реализовать да и можно ли вообще?
   1Сергей
 
1 - 28.06.21 - 12:20
Если запросы запрещены по религиозным соображениям, то делать второй цикл по табличной части.
(Если я правильно сванговал что такое таблица в справочнике)
   apdate by
 
2 - 28.06.21 - 12:22
да верно не  хочу писать запросы 

а без цикла нету метода?  

в массиве вроде(ж) есть (ошибаюсь)?
   apdate by
 
3 - 28.06.21 - 12:23
если нету такого метода помогите с запросом? пожалуйста :-)
   Бишбармак
 
4 - 28.06.21 - 12:24
1) Товары в массив
2) а) Массив и б) "ту таблицу" в запрос 
3) В запросе ГДЕ родитель в "ту таблицу".
   1Сергей
 
5 - 28.06.21 - 12:28
(3) НаятиСтроки
   apdate by
 
6 - 28.06.21 - 12:29
(5) СпрСсылка.ИмяТаб.НайтиСтроки("Колонка","Знач") верно?
   apdate by
 
7 - 28.06.21 - 12:31
В СП 

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ТекТовар);
НайденныеСтроки = Состав.НайтиСтроки(ПараметрыОтбора);

кто такой "Состав" Ссылка на справочник верно?
   1Сергей
 
8 - 28.06.21 - 12:32
(7) нет, это табличная часть
   apdate by
 
9 - 28.06.21 - 12:32
(7) туплю извините на ИмяСправочника.Ссылка.ИмяТаблицы?
   1Сергей
 
10 - 28.06.21 - 12:32
Мы ведь не про семерку?
   apdate by
 
11 - 28.06.21 - 12:33
(8) спасибо! очень помогли )
   apdate by
 
12 - 28.06.21 - 12:33
))) нет но в 8 есть этот метод и вроде подходит )
   1Сергей
 
13 - 28.06.21 - 12:33
(9) нет. Ссылка на конкретный элемент справочника, или справочникобъект
   apdate by
 
14 - 28.06.21 - 12:35
(13) :-) да я это и имел в виду (понедельник видимо морожу (
   apdate by
 
15 - 28.06.21 - 12:50
(0) не все-же морожу (
В  общем есть справочник 

НастройкиАндроид у него есть таблица с одним полем "ГруппыИсключения"

В модуле в процедуре которая подписана на событие при записи 

получаю все элементы номенклатуры мне необходимо проверить не в иерархии ли она групп исключения

помогите с запросом что то не догоняю (
   apdate by
 
16 - 28.06.21 - 12:56
Выбрать
     ГруппаИсключение
ИЗ
    Не Знаю Как Задать Здесь Таблицу??
ГДЕ Номенклатура НЕ В ИЕРАРХИИ (Так-же не знаю что писать здесь)
   apdate by
 
17 - 28.06.21 - 12:57
но по сути мнедаже не нужны строки и т д мне нужно получить ложь не в иерархии и истину если в иерархии
   apdate by
 
18 - 28.06.21 - 13:15
Что то не получается

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ТоварПереданный.Ссылка
        |ИЗ
        |    ТоварПереданный КАК ТоварПереданный
        |ГДЕ
        |    ТоварПереданный.Ссылка В ИЕРАРХИИ(&ГруппыИсключений)";
    
    Запрос.УстановитьПараметр("ТоварПереданный",  Род);
    Запрос.УстановитьПараметр("ГруппыИсключений", УзелОбмена.ГруппыИсключения);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи

    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   apdate by
 
19 - 28.06.21 - 13:23
может можно как то получить ссылку на группу по уровню

пример Товар.Родитель[0]??

ато с запросами у меня косяк (
   apdate by
 
20 - 28.06.21 - 13:37
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)";
    
    Запрос.УстановитьПараметр("ГруппаИсключение", Здесь можно ли задать несколько грпп?);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи

    КонецЦикла;
   apdate by
 
21 - 28.06.21 - 13:37
можно ли указать не одну группу а список групп и проверять в иерархии ли?
   apdate by
 
22 - 28.06.21 - 13:41
В общем пока написал так (


Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    ВИерархии = Ложь;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        Для каждого ГруппИскл Из УзелОбмена.ГруппыИсключения Цикл
            //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

            // Данный фрагмент построен конструктором.

            // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

            
            Запрос = Новый Запрос;
            Запрос.Текст = 
            "ВЫБРАТЬ
            |    Номенклатура.Ссылка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
            |    И Номенклатура.Ссылка = &ВыбТовар";
            
            Запрос.УстановитьПараметр("ВыбТовар", Товар);
            Запрос.УстановитьПараметр("ГруппаИсключение", ГруппИскл.ГруппаИсключения);
            
            РезультатЗапроса = Запрос.Выполнить();
            
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                ВИерархии = Истина;
            КонецЦикла;
            
            //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

            
        КонецЦикла;
    КонецЕсли;
    Возврат ВИерархии;
КонецФункции
   apdate by
 
23 - 28.06.21 - 13:46
(22) так все работает верно но нельзя ли ка кто ускорить или упростить или и то и другое?
   Мультук
 
24 - 28.06.21 - 14:07
(22)

МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);

Цикл - не нужен
   Мультук
 
25 - 28.06.21 - 14:10
(22)

ВИерархии =  не РезультатЗапроса.Пустой();

Цикл "Пока" тоже не нужен.
   apdate by
 
26 - 28.06.21 - 14:13
что то (24) не хочет отрабатывать (

Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    Отвечает = Истина;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

        // Данный фрагмент построен конструктором.

        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар
        |    И Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        |    И Номенклатура.ФайлКартинки <> ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
        |    И Номенклатура.ФайлКартинки.ПометкаУдаления = &ПометкаУдаления";
        
        Запрос.УстановитьПараметр("ВыбТовар", Товар);
        Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);
        Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Отвечает = Ложь;
        КонецЦикла;
        
        //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    КонецЕсли;
    Возврат Отвечает;
    
КонецФункции
   apdate by
 
27 - 28.06.21 - 14:26
(26) простите я совсем уже морожу вс еработает (сам установил что ы только с картинками было и т д

а в итоге перезаписывал не тот товар (

все работает спасибо большое!

Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    Отвечает = Истина;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

        // Данный фрагмент построен конструктором.

        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар";
        
        Запрос.УстановитьПараметр("ВыбТовар", Товар);
        Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);
        Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        Если не РезультатЗапроса.Пустой() Тогда
            Возврат Ложь;
        КонецЕсли;
        
        //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    КонецЕсли;
    Возврат Отвечает;
    
КонецФункции
   apdate by
 
28 - 28.06.21 - 14:36
|ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар";

а можно ли в запросе использовать в т.ч ИЛИ ?

мне необходимо так-же проверить заполнена ли картинка , есть ли вообще родитель, и не помечена ли картинка на удаление.
   apdate by
 
29 - 28.06.21 - 14:43
такой запрос будет верным?

Мне нужно проверить 

Что бы необходимый товар не входил в группы исключения, либо у товара есть картинка и картинка не помечена на удаление а так же что родитель у товара заполенен

Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    Отвечает = Ложь;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

        // Данный фрагмент построен конструктором.

        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар
        |    ИЛИ Номенклатура.ФайлКартинки = ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
        |    ИЛИ Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        |    ИЛИ Номенклатура.ФайлКартинки.ПометкаУдаления = &ПометкаУдаления";
        
        Запрос.УстановитьПараметр("ВыбТовар", Товар);
        Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);
        Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        Если не РезультатЗапроса.Пустой() Тогда
            Возврат Ложь;
        КонецЕсли;
        
        //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    КонецЕсли;
    
    Возврат Отвечает;
    
КонецФункции
   apdate by
 
30 - 28.06.21 - 14:58
Пока в силу плохого знания запросов в 1С (точнее совсем его незнания) :-) решил так

Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    Отвечает = Ложь;
    //Проверим не состоит ли товар в ненужных нам группах

    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар";
        
        Запрос.УстановитьПараметр("ВыбТовар", Товар);
        Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);
        Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        Если НЕ РезультатЗапроса.Пустой() Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
    //Проверим  вс ели заполнено у товара

    Запрос_ = Новый Запрос;
    Запрос_.Текст = 
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ФайлКартинки <> ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
    |    И Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    |    И Номенклатура.ФайлКартинки.ПометкаУдаления = &ПометкаУдаления
    |    И Номенклатура.Ссылка = &Ссылка";
    
    Запрос_.УстановитьПараметр("ПометкаУдаления", Ложь);
    Запрос_.УстановитьПараметр("Ссылка", Товар);
    
    РезультатЗапроса_ = Запрос_.Выполнить();
    
    Если НЕ РезультатЗапроса_.Пустой() Тогда
        Возврат Истина;
    КонецЕсли;
    Возврат Отвечает;
КонецФункции
 
 
   Мультук
 
31 - 28.06.21 - 15:27
(30) Надеюсь, ты пишешь и проверяешь свои запросы в какой-нибудь сторонней обработке "Консоль запросов" ?

Идея разработки -- написали, проверили, отладили запрос в консоли, а затем перенесли его в код.


Список тем форума
 
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.