|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
Масянька
16.05.12
✎
09:44
|
Доброе утро!
Помогите с запросом, пожалуйста: Функция ПроверкаДублей(ПараметрСправочник, ПараметрУсловие1Поле, ПараметрУсловие1Ссылка, ПараметрУсловие2, ПараметрУсловие2Поле, ПараметрУсловие2Ссылка, ПараметрСсылка) Экспорт Условие2 = ""; ЗапросПоДублям = Новый Запрос(); ЗапросПоДублям.Текст = "ВЫБРАТЬ | СправочникОбъект.Наименование, | СправочникОбъект.Контрагент.Ссылка |ИЗ | " + ПараметрСправочник.Метаданные().ПолноеИмя() + " КАК СправочникОбъект |ГДЕ | СправочникОбъект." + ПараметрУсловие1Поле + " =&ПараметрУсловие1Ссылка | " + Условие2 + " | И СправочникОбъект.Ссылка <> &Ссылка"; ЗапросПоДублям.УстановитьПараметр("ПараметрУсловие1Ссылка", ПараметрУсловие1Ссылка); Если ПараметрУсловие2 = Истина Тогда Условие2 = "СправочникОбъект." + ПараметрУсловие2Поле + " =&ПараметрУсловие2Ссылка"; ЗапросПоДублям.УстановитьПараметр("ПараметрУсловие2Ссылка", ПараметрУсловие2Ссылка); Сообщить("1 - " + Условие2 + " - " + ПараметрУсловие2Ссылка); КонецЕсли; ЗапросПоДублям.УстановитьПараметр("Ссылка", ПараметрСсылка); Возврат ЗапросПоДублям.Выполнить().Пустой(); КонецФункции // ПроверкаДублей() Если элОбщегоНазначения.ПроверкаДублей(ЭтотОбъект, "Наименование", Наименование, Истина, "Контрагент.Ссылка", Контрагент, Ссылка) = Ложь Тогда Предупреждение("Линия с таким наименованием (" + Наименование + ") уже есть в справочнике."); Отказ = Истина; КонецЕсли; |
|||
1
andrewks
16.05.12
✎
09:46
|
в чём вопрос?
|
|||
2
Масянька
16.05.12
✎
09:47
|
(1) Забыла :). В справочнике есть такое наименование, но завожу другого контрагента. А ругается, что такая запись уже есть.
|
|||
3
andrewks
16.05.12
✎
09:49
|
а разве не этого надо, судя по коду?
|
|||
4
Масянька
16.05.12
✎
09:53
|
Надо: может быть много одинаковых наименований, но контрагенты разные или 1 пустой.
Например: ADMIRAL - (пустой контрагент) ADMIRAL - ООО "Веллас" ADMIRAL - Деловые линии Новую запись: ADMIRAL - Деловые линии - завести нельзя, а запись ADMIRAL - ЗАО "Маерск" - можно. |
|||
5
Азазелло
16.05.12
✎
10:00
|
(0) Так ты Условие2 заполняешь после того, как собираешь текст запроса
|
|||
6
Азазелло
16.05.12
✎
10:01
|
(0) Ну и да, традиционно, Если ПараметрУсловие2 = Истина Тогда - жесть :)
Да и СправочникОбъект.Контрагент.Ссылка тоже жесть |
|||
7
Масянька
16.05.12
✎
10:01
|
Ребята! Я тут туплю (машину разбила :((((((((( ). Вы уж извините. А куда надо Условие2 пихнуть?
|
|||
8
Масянька
16.05.12
✎
10:02
|
Пардон - поняла - до установки параметров....
|
|||
9
andrewks
16.05.12
✎
10:03
|
(8) до склейки текста запроса
|
|||
10
Азазелло
16.05.12
✎
10:03
|
(8) В данном случае
Если ПараметрУсловие2 = Истина Тогда Условие2 = "СправочникОбъект." + ПараметрУсловие2Поле + " =&ПараметрУсловие2Ссылка"; КонецЕсли; Вынести в самый верх, там, где Условие2 = "" |
|||
11
Масянька
16.05.12
✎
10:05
|
(6) А как нужно?
|
|||
12
cViper
16.05.12
✎
10:13
|
(0) Зачем ты в запросе даешь название таблице "СправочникОбъект", если у тебя там не объект?
Зачем передавать булев параметр ПараметрУсловие2 если можно просто проверять ПараметрУсловие2Поле на заполненность? "ПараметрУсловие1Поле, ПараметрУсловие1Ссылка" - такие параметры можно положить в единую структуру данных (ключ-значение). |
|||
13
Азазелло
16.05.12
✎
10:20
|
(12) да какая разница, какой синоним придумать
(11) достаточно просто Если ПараметрУсловие2 Тогда и ВЫБРАТЬ СправочникОбъект.Контрагент |
|||
14
cViper
16.05.12
✎
10:26
|
(13) Для быдлокодера разницы никакой.
|
|||
15
Азазелло
16.05.12
✎
10:30
|
(14) мы в 1с-е - все такие :) и не надо начинать холивар на тему, что с синонимов все и начинается.
|
|||
16
Азазелло
16.05.12
✎
10:31
|
(15) *уточняю "мы в 1с-е - все такие" - с точки зрения "православных" программистов :)
|
|||
17
Азазелло
16.05.12
✎
10:32
|
(14) ну и в продолжнение (12) - можно подумать, у вас там СправочникСсылка :) Не думаю, что ты даешь синоними а-ля ОсновнаяТаблицаСправочникаНоменклатура
|
|||
18
Масянька
16.05.12
✎
10:34
|
Дядьки - спасибо!
PS Целовать не буду - плачу :((((( |
|||
19
andrewks
16.05.12
✎
10:36
|
(18) намекаешь, что надо утешить?
|
|||
20
Азазелло
16.05.12
✎
10:37
|
(18) машина - железка. сама жива и здорова - главное. остальное - прибудет.
|
|||
21
Масянька
16.05.12
✎
10:38
|
(19) Бесполезно :(((
Забыла: а как параметры передавать лучше? Ткните - где про "ключ-значение" посмотреть. |
|||
22
Азазелло
16.05.12
✎
10:39
|
(21) куда передавать?
|
|||
23
Масянька
16.05.12
✎
10:47
|
(22) В функцию. Такая фишка - в нескольких справочниках используется. Вот и хочу сделать функцию.
|
|||
24
Азазелло
16.05.12
✎
10:54
|
(23) Ну, если делать универсально, то передавай в функцию массив структур вида
Новый Структура("Поле, Значение", <ИмяРеквизитаСправочника>, <ЗначениеРеквизитаСправочника>) В функции пробегай по этому массиву и для каждого элемента достраивай текст запроса что-то вроде Для Каждого ТекУсловие Из МассивУсловий Цикл ТекстЗапроса = ТекстЗапроса + "И " ТекУсловие.Поле + " = &_" + ТекУсловие.ПолеКонецЦикла; Запрос.УстановитьПараметр("_" + ТекУсловие.Поле, ТекУсловие.Значение); КонецЦикла; |
|||
25
Масянька
16.05.12
✎
11:05
|
Огромное, человеческое спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |