| 
    
        
     
     | 
    
  | 
Поиск по полному соответсвию | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Olissen    
     26.11.18 
            ✎
    22:49 
 | 
         
        Здравствуйте, есть проблема, есть внешняя обработка, на ней есть таб.часть куда грузятся данные из xls файла (Номенклатура, Код, Артикул, Цена) (реквизиты таб.части: "Т_Наименование", "Т_Код", "Т_Артикул", "Т_Цена", "Т_Номенклатура") то есть список номенклатуры из xls грузится в эту таб.часть. Также есть три флажка "Код", "Артикул", "Наименование" в зависимости от установки галки на этих флажках происходит поиск по выбранным критериям в справочнике "Номенклатура" (конфигурация УТ 10.3), и найденный результат (а именно ссылка на найденную номенклатуру) попадает  в реквизит Т_Номенклатура. Например установил я галку "Код", в  таб.часть из xls загружаются такие данные по коду: "777", "0000111", "0000099" и если в справочнике есть номенклатура с такими данными кода,то ссылка на неё попадает в реквизит "Т_Номенклатура" так вот, по одной галке у меня ищет хорошо, но задача такая чтобы он искал по полному соответствию в случае если выбрано несколько галок, например есть номенклатура "Грабли" с кодом "0000555" так вот в случае если установллены галки "Код" и "Номенклатура" он будет искать по полному соответсвию в строке таб.части, то есть если в строке таб.части есть номенклатура "Грабли" с кодом "0000555", то поиск отобразит ссылку в реквизите "Т_Номенклатура"  в иных случаях нет, также и в по любым сочетаниям галок,хоть по всем трём. 
 
        Нагуглил,что как-то через запрос можно сделать,но не понимаю как с чего начать и от чего отталкиваться непонятно пока... Объяснил конечно криво, буду рад любой помощи.  | 
|||
| 
    1
    
        Сияющий в темноте    
     27.11.18 
            ✎
    09:32 
 | 
         
        Ищем то где
 
        если в справочнике,то в условии запроса перечисляем условия поиска в зависимости от установленных галочек.  | 
|||
| 
    2
    
        Olissen    
     27.11.18 
            ✎
    11:14 
 | 
         
        (1) пойдёт так,если я сделаю через параметры, а затем установлю значения параметров исходя из данных текущих полей таб.части чтобы искал по полному соответсвию. Что-то типа такого:
 
        [code] Для Каждого ТекСтрока из ТабЧасть Цикл Если Флаг_Номенклатура и Флаг_Код Тогда Запрос=Новый Запрос; Запрос.Текст=" ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование = &Наименование И Номенклатура.Код = &Код"; Запрос.УстановитьПараметр("Наименование", ТекСтрока.Т_Наименование); Запрос.УстановитьПараметр("Код", ТекСтрока.Т_Код); КонецЦикла [/code] Так пойдёт?  | 
|||
| 
    3
    
        catena    
     27.11.18 
            ✎
    11:17 
 | 
         
        (2)А если отдельно поставят Флаг_Номенклатура или Флаг_Код, будешь еще две ветки обработки писать? А если флажков три, то будет шесть веток?     
         | 
|||
| 
    4
    
        Olissen    
     27.11.18 
            ✎
    11:19 
 | 
         
        (3) Не знаю,пока думаю,получается надо как-то значение флажков передать в условия запроса или что?     
         | 
|||
| 
    5
    
        Olissen    
     27.11.18 
            ✎
    11:32 
 | 
         
        (3) Ну короче так работает ищет то,что я хотел:
 
        [code] Для Каждого ТекСтрока из ТабЧасть Цикл Если Флаг_Номенклатура И Флаг_Код Тогда Запрос=Новый Запрос; Запрос.Текст=" |ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Наименование = &Наименование | И Номенклатура.Код = &Код"; Запрос.УстановитьПараметр("Наименование", ТекСтрока.Т_Наименование); Запрос.УстановитьПараметр("Код", ТекСтрока.Т_Код); Результат=Запрос.Выполнить(); Выборка=Результат.Выбрать(); Пока Выборка.Следующий() Цикл ТекСтрока.Т_Номенклатура=Выборка.Ссылка; КонецЦикла; КонецЕсли; КонецЦикла [/code] Однако смущает вопрос по флажкам, просто в таком случае придётся писать много "Если...Тогда....КонецЕсли".  | 
|||
| 
    6
    
        Olissen    
     27.11.18 
            ✎
    11:34 
 | 
         
        (5) есть ли вариант получше?     
         | 
|||
| 
    7
    
        catena    
     27.11.18 
            ✎
    11:45 
 | 
         
        Дарю
 
        ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | (Номенклатура.Наименование = &Наименование или не &Флаг_Номенклатура) | И (Номенклатура.Код = &Код или не &Флаг_Код)  | 
|||
| 
    8
    
        Andy13    
     27.11.18 
            ✎
    11:56 
 | 
         
        Функция ПолучитьНоменклатуру(Наименование, Код, Артикул)
 
        Возвр = Справочники.Номенклатура.ПустаяСсылка(); Если Наименование = Неопеределено и Код = Неопеределено и Артикул = Неопеределено Тогда Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | ВЫБОР | КОГДА &Наименование = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА | ИНАЧЕ Номенклатура.Наименование = &Наименование | КОНЕЦ | И ВЫБОР | КОГДА &Код = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА | ИНАЧЕ Номенклатура.Код = &Код | КОНЕЦ | И ВЫБОР | КОГДА &Артикул = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА | ИНАЧЕ Номенклатура.Артикул = &Артикул | КОНЕЦ"; Запрос.УстановитьПараметр("Наименование", Наименование); Запрос.УстановитьПараметр("Код", Код); Запрос.УстановитьПараметр("Артикул", Артикул); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Возвр = Выборка.Ссылка; КонецЕсли; КонецЕсли; Возврат Возвр; КонецФункции // ПолучитьНоменклатуру() Для Каждого ТекСтрока из ТабЧасть Цикл Наименование= ?(Флаг_Номенклатура, ТекСтрока.Т_Наименование, Неопределено); Код = ?(Флаг_Код, ТекСтрока.Т_Код, Неопределено); Артикул = ?(Флаг_Артикул, ТекСтрока.Т_Артикул, Неопределено); ТекСтрока.Т_Номенклатура = ПолучитьНоменклатуру(Наименование, Код, Артикул); КонецЦикла  | 
|||
| 
    9
    
        Andy13    
     27.11.18 
            ✎
    11:57 
 | 
         
        Мда...
 
        Неопеределено = Непределено Накосячил...  | 
|||
| 
    10
    
        Andy13    
     27.11.18 
            ✎
    11:57 
 | 
         
        Тяжелый день..
 
        Неопеределено = Неопределено  | 
|||
| 
    11
    
        Olissen    
     27.11.18 
            ✎
    12:50 
 | 
         
        (8) Спасибо за помощь, разобрался. 
 
        (7)тоже спасибо за помощь,воспользовался вашим вариантом в итоге получилось (не додумался связать значение флажка с параметром :( нуб ),а можете пожалуйста если не затруднит пояснить что означает фрагмент ""ИЛИ НЕ &Флаг_НазваниеФлага"" [/code] Запрос=Новый Запрос; Запрос.Текст=" |ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | (Номенклатура.Наименование = &Наименование ИЛИ НЕ &Флаг_Номенклатура) | И (Номенклатура.Код = &Код ИЛИ НЕ &Флаг_Код) | И (Номенклатура.Артикул=&Артикул ИЛИ НЕ &Флаг_Артикул)"; Запрос.УстановитьПараметр("Наименование", ТекСтрока.Т_Наименование); Запрос.УстановитьПараметр("Код", ТекСтрока.Т_Код); Запрос.УстановитьПараметр("Артикул", ТекСтрока.Т_Артикул); Запрос.УстановитьПараметр("Флаг_Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Флаг_Код", Код); Запрос.УстановитьПараметр("Флаг_Артикул", Артикул); Результат=Запрос.Выполнить(); Выборка=Результат.Выбрать(); Пока Выборка.Следующий() Цикл ТекСтрока.Т_Номенклатура=Выборка.Ссылка; КонецЦикла; [/code]  | 
|||
| 
    12
    
        Вафель    
     27.11.18 
            ✎
    13:10 
 | 
         
        лучше без фглагов, а через построитель     
         | 
|||
| 
    13
    
        Вафель    
     27.11.18 
            ✎
    13:11 
 | 
         
        Запрос=Новый ПостроительЗапроса; 
        ... Если Флаг_Код Тогда ЭлементОтбора = Запрос.Отбор.Добавить("Код"); ЭлементОтбора.Установить(Код, Истина); КонецЕсли;  | 
|||
| 
    14
    
        catena    
     27.11.18 
            ✎
    13:16 
 | 
         
        (11)Это значит, что если снят флаг, то все, если флаг стоит, то по равенству наименования.     
         | 
|||
| 
    15
    
        1Сергей    
     27.11.18 
            ✎
    13:18 
 | 
         
        (8) а ты уверен, что там в реквизитах вообще может быть неопределено?     
         | 
|||
| 
    16
    
        catena    
     27.11.18 
            ✎
    13:18 
 | 
         
        (13)Нет, не лучше, потому что потом нужно будет еще избавляться от запроса в цикле, а там появится соединение ТЗ со справочником, а построитель не умеет ТЗ в запрос.     
         | 
|||
| 
    17
    
        Olissen    
     27.11.18 
            ✎
    16:31 
 | 
         
        (13) в этом способе получается будет много "Если"? 
 
        (14)спасибо за объяснение,понял,разобрался.  | 
|||
| 
    18
    
        Вафель    
     27.11.18 
            ✎
    16:33 
 | 
         
        (17) можно без если 
         );     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |