|
Поиск по полному соответсвию | ☑ | ||
---|---|---|---|---|
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) можно без если
); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |