Имя: Пароль:
1C
1С v8
Как найти в таблице в справочнике нужную ссылку
0 apdate by
 
28.06.21
12:16
Всем привет!

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

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

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

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

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

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

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

В  общем есть справочник

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

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

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

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

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

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

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


Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    ВИерархии = Ложь;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        Для каждого ГруппИскл Из УзелОбмена.ГруппыИсключения Цикл
            //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
            // Данный фрагмент построен конструктором.
            // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
            
            Запрос = Новый Запрос;
            Запрос.Текст =
            "ВЫБРАТЬ
            |    Номенклатура.Ссылка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
            |    И Номенклатура.Ссылка = &ВыбТовар";
            
            Запрос.УстановитьПараметр("ВыбТовар", Товар);
            Запрос.УстановитьПараметр("ГруппаИсключение", ГруппИскл.ГруппаИсключения);
            
            РезультатЗапроса = Запрос.Выполнить();
            
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                ВИерархии = Истина;
            КонецЦикла;
            
            //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
            
        КонецЦикла;
    КонецЕсли;
    Возврат ВИерархии;
КонецФункции
23 apdate by
 
28.06.21
13:46
(22) так все работает верно но нельзя ли ка кто ускорить или упростить или и то и другое?
24 Мультук
 
гуру
28.06.21
14:07
(22)

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

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

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

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

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

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

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

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

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

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

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

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

Функция ОтвечаетТребованиям(УзелОбмена, Товар)
    Отвечает = Ложь;
    Если УзелОбмена.ГруппыИсключения.Количество() > 0 Тогда
        МассивГруппИсключений = УзелОбмена.ГруппыИсключения.ВыгрузитьКолонку("ГруппаИсключения");
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
        // Данный фрагмент построен конструктором.
        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаИсключение)
        |    И Номенклатура.Ссылка = &ВыбТовар
        |    ИЛИ Номенклатура.ФайлКартинки = ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
        |    ИЛИ Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        |    ИЛИ Номенклатура.ФайлКартинки.ПометкаУдаления = &ПометкаУдаления";
        
        Запрос.УстановитьПараметр("ВыбТовар", Товар);
        Запрос.УстановитьПараметр("ГруппаИсключение", МассивГруппИсключений);
        Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        Если не РезультатЗапроса.Пустой() Тогда
            Возврат Ложь;
        КонецЕсли;
        
        //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    КонецЕсли;
    
    Возврат Отвечает;
    
КонецФункции
30 apdate by
 
28.06.21
14:58
Пока в силу плохого знания запросов в 1С (точнее совсем его незнания) :-) решил так

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

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