|
ПОДОБНО в запросе | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
11.11.18
✎
11:51
|
Альфа-Авто. Раньше за услугу "Стоянка автомобиля" плату не брали. Теперь решили брать с тех кто не сдает автомобиль в ремонт, а просто оставляет. В документе "Акт об оказании услуг" есть реквизит Автомобиль, но чтобы его занести нужно заполнить кучу параметров необходимых для ремонта. А для стоянки достаточно гос. номера. Поэтому в акт сделал реквизит Автомобиль составным, добавил тип Строка для занесения в нее гос. номера. Но все же желательно если Автомобиль есть в базе, то Строка заменялась им. Для этого написал функцию:
// Возвращает Автомобиль (если найден) по строке, к которой гос. номер указан // Функция АвтомобильПоГосНомеру(СтрокаАвтомобиль, ГосНомер = "") Экспорт СтрАвтомобиль = СтрЗаменить(ВРег(СтрокаАвтомобиль), "-", ""); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль, " ", ""); Автомобиль = Справочники.Автомобили.ПустаяСсылка(); Если СтрДлина(СтрокаАвтомобиль) < 8 Тогда Возврат Автомобиль; КонецЕсли; // Замена английских символов русскими СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"A","А"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"B","В"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"E","Е"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"K","К"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"M","М"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"H","Н"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"O","О"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"P","Р"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"C","С"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"T","Т"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"Y","У"); СтрАвтомобиль = СтрЗаменить(СтрАвтомобиль,"X","Х"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | АвтомобилиСрезПоследних.Автомобиль, | АвтомобилиСрезПоследних.Значение |ИЗ | РегистрСведений.Автомобили.СрезПоследних КАК АвтомобилиСрезПоследних |ГДЕ | АвтомобилиСрезПоследних.ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер) | |УПОРЯДОЧИТЬ ПО | АвтомобилиСрезПоследних.Период УБЫВ"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Найти(СтрАвтомобиль, Выборка.Значение) > 0 Тогда ГосНомер = Выборка.Значение; Возврат Выборка.Автомобиль; КонецЕсли; КонецЦикла; Возврат Автомобиль; КонецФункции // АвтомобильПоГосНомеру() |
|||
1
Mikhail Volkov
11.11.18
✎
11:52
|
РегистрСведений.Автомобили.СрезПоследних КАК АвтомобилиСрезПоследних
от фонаря написал. Правильно ли сделал? |
|||
2
ktibo
11.11.18
✎
13:15
|
А юзеры теперь каждый раз тип реквизита выбирают (строка или справочник)?
|
|||
3
Mikhail Volkov
11.11.18
✎
13:32
|
(0) Сам вопрос забыл написать: а нельзя ли в запросе использовать ПОДОБНО для ускорения запроса?
(2) Ну если автомобиль знакомый, был в ремонте, есть в базе, то из справочника. А если нет, то строкой. |
|||
4
Кирпич
11.11.18
✎
15:33
|
(3) для ускорения надо писать "ПОДОБНО МОЛНИИ"
|
|||
5
Mikhail Volkov
11.11.18
✎
17:21
|
(4) Как другим способом ускорить? И насчет СрезПоследних, правильно?
|
|||
6
Вася Теркин
11.11.18
✎
17:25
|
Жуть " если автомобиль есть в базе накине. Ему деньжат" то есть вашим клиентом лучше не становиться. Ибо незнакомым авто счет выставить не получится...
|
|||
7
Вася Теркин
11.11.18
✎
17:27
|
Интересно как средний ценник по ремонту коррелирует со средним ценником по стоянке. Ваша рентабельность действительно в глубокой заднице?
|
|||
8
youalex
11.11.18
✎
17:28
|
||||
9
vi0
11.11.18
✎
17:28
|
а в чем проблема то?
|
|||
10
Вася Теркин
11.11.18
✎
17:29
|
Прикольно "если автомобиль есть в базе..." А если нету? Вы ему задним числом будете счет выставлять за стоянку? А он с вами подписывался платить за стоянку или это кабальная сделка?
|
|||
11
Mikhail Volkov
11.11.18
✎
17:41
|
(10) Если нет, то реквизит автомобиль строкой, например, только гос.номер.
|
|||
12
Mikhail Volkov
12.11.18
✎
11:15
|
ПОДОБНО вряд ли здесь поможет. А вот по поводу СрезПоследних, переписал текст запроса так
Запрос.Текст = " |ВЫБРАТЬ | АвтомобилиСрезПоследних.Автомобиль, | АвтомобилиСрезПоследних.Значение |ИЗ | РегистрСведений.Автомобили.СрезПоследних( | &Дата, | ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер)) КАК АвтомобилиСрезПоследних"; Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Ошибку дает: Неверные параметры "РегистрСведений.Автомобили.СрезПоследних, 1" ЗНАЧЕНИЕ(<<?>>Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер)) КАК АвтомобилиСрезПоследних Что ни так? |
|||
13
иубиповец
12.11.18
✎
11:46
|
(12) запрос сам должен догадаться к чему это условие относится значение = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер))
А чем не подходит то Подобно %ААА666А% |
|||
14
PR
12.11.18
✎
11:50
|
(0) Ма. Ла. Дец.
|
|||
15
catena
12.11.18
✎
12:22
|
" Если Найти(СтрАвтомобиль, Выборка.Значение) > 0"
"ПОДОБНО вряд ли здесь поможет." А для чего, по-вашему, вообще ПОДОБНО? |
|||
16
Mikhail Volkov
12.11.18
✎
14:57
|
(15) А так можно?
| &Дата, | ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер)) КАК АвтомобилиСрезПоследних | И &СтрАвтомобиль ПОДОБНО АвтомобилиСрезПоследних.Значение"; |
|||
17
Mikhail Volkov
12.11.18
✎
15:02
|
Не, так;
| &Дата, | ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер) | И &СтрАвтомобиль ПОДОБНО Значение) КАК АвтомобилиСрезПоследних"; Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Запрос.УстановитьПараметр("СтрАвтомобиль", %СтрАвтомобиль%); |
|||
18
catena
13.11.18
✎
06:01
|
(17)Нет, так нельзя. Можно
| И Значение ПОДОБНО &СтрАвтомобиль) КАК АвтомобилиСрезПоследних"; Запрос.УстановитьПараметр("СтрАвтомобиль", "%"+СокрЛП(СтрАвтомобиль)+"%"); |
|||
19
Mikhail Volkov
13.11.18
✎
06:51
|
(18) Жаль, мне нужно в строке СтрАвтомобиль найти (проверить содержится ли) подстроку ГосНомер (т.е. Значение).
В СтрАвтомобиль пользователь может написать любую информацию о автомобиле: цвет, марку... кроме гос. номера. |
|||
20
Мимохожий Однако
13.11.18
✎
06:52
|
(0) Кто запретил добавить реквизит ГосНомер и использовать его?
|
|||
21
catena
13.11.18
✎
07:02
|
(19)Понятно. Ну, тогда да, наоборот. И проценты прибавлять наоборот.
|
|||
22
catena
13.11.18
✎
07:03
|
| И &СтрАвтомобиль ПОДОБНО ""%""+Выразить(Значение как строка(100))+""%"" ) КАК АвтомобилиСрезПоследних";
Запрос.УстановитьПараметр("СтрАвтомобиль", СокрЛП(СтрАвтомобиль)); |
|||
23
Mikhail Volkov
13.11.18
✎
07:57
|
(22) Спс, так заработало!
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | АвтомобилиСрезПоследних.Автомобиль, | АвтомобилиСрезПоследних.Значение |ИЗ | РегистрСведений.Автомобили.СрезПоследних( | &Дата, | ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер) | И &СтрАвтомобиль ПОДОБНО ""%"" + (ВЫРАЗИТЬ(Значение КАК СТРОКА(100))) + ""%"" | И Значение <> """") КАК АвтомобилиСрезПоследних"; Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Запрос.УстановитьПараметр("СтрАвтомобиль", СокрЛП(СтрАвтомобиль)); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ГосНомер = Выборка.Значение; Возврат Выборка.Автомобиль; КонецЕсли; Возврат Автомобиль; |
|||
24
vi0
13.11.18
✎
14:36
|
(23) если тебе нужно ускорить, и Дата в запросе всегда = ТекущаяДата(), то у регистра можно попробовать установить флаг "разрешить итоге среза первых", и в запросе не указывать параметр Дата
|
|||
25
Mikhail Volkov
13.11.18
✎
17:21
|
(24) Спс, но изменять сами объекты конфигурации боязно.
|
|||
26
Bober
13.11.18
✎
19:30
|
(23) если таблица регистра большая, то такое условие приведет к полному перебору всех записей таблицы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |