Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как удалить часть наименования элемента справочника в запросе?

Как удалить часть наименования элемента справочника в запросе?
Я
   Dotoshin
 
06.02.18 - 16:17
Коллеги, подскажите пожалуйста, может есть какое-то простое решение этого вопроса?
Понимаю, что тема истоптанная вдоль и поперек, понимаю, что все это должно делаться при обработке результатов запроса, но уж больно не хочется лезть по локоть в чужой код и там исправлять.
Есть один отчет (древний как г@в№0 мамонта), написанный врукопашную без применения СКД и прочих построителей. Вот в нем запрос тянет наименование из справочника, а в этом наименовании в скобочках написано что-то типа комментария, который нужен для удобства пользователей, но нафих не нужен при печати.
Может есть какой-то хитрый ход с помощью которого можно прямо запросом вырезать лишнюю часть из наименования или все же придется "грызть кактус"?
 
 
   Быдло замкадное
 
1 - 06.02.18 - 16:21
можно добавить реквизит Наименование для печати, его программно в подписке заполнять обрезанным и в отчете выводить.
Но это извращенство похуже лезть по локоть в чужой код.
   Dotoshin
 
2 - 06.02.18 - 16:26
(1) Мысль конечно интересная, но огород на пустом месте тоже неохота городить...
   Вафель
 
3 - 06.02.18 - 16:28
можно функцию добавить, но возможно все будет тормозить
   drcrasher
 
4 - 06.02.18 - 16:34
(0) в запросе обрезать можно только по длине. у тебя ж программно формируется печатная форма? вот при заполнении параметров и обрезай
   Dotoshin
 
5 - 06.02.18 - 16:44
(4) >>в запросе обрезать можно только по длине.
Ну собсно в этом и есть засада, знал бы с какой позиции начать обрезку, проблем бы не было...

Да, наверно придется программно обрезать.
   Sapiens_bru
 
6 - 06.02.18 - 20:48
(0) Чисто теоретический интерес может представлять подобное решение:
ВЫБРАТЬ    0 КАК Поле
ПОМЕСТИТЬ Цифры
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    3
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    4
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ     5
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    6
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    7
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ     8
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    9
;

ВЫБРАТЬ ПЕРВЫЕ 100
Числа1.Поле + 10 * Числа2.Поле КАК ПОЛЕ
ПОМЕСТИТЬ втСотня
ИЗ
Цифры КАК Числа1,Цифры КАК Числа2
УПОРЯДОЧИТЬ ПО     ПОЛЕ
;

ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
МИНИМУМ(втСотня.ПОЛЕ) КАК Номер
ПОМЕСТИТЬ НомераСкобок
ИЗ
Справочник.Номенклатура КАК Номенклатура,
втСотня КАК втСотня
ГДЕ     
ПОДСТРОКА(Номенклатура.Наименование, втСотня.ПОЛЕ, 1) = "("

СГРУППИРОВАТЬ ПО
    Номенклатура.Ссылка
;

ВЫБРАТЬ
    ВЫБОР
        КОГДА ЕСТЬNULL(НомераСкобок.Номер, 0) = 0
            ТОГДА Номенклатура.Наименование
        ИНАЧЕ ПОДСТРОКА(Номенклатура.Наименование, 1, НомераСкобок.Номер-1)
    КОНЕЦ КАК Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ НомераСкобок КАК НомераСкобок
        ПО Номенклатура.Ссылка = НомераСкобок.Ссылка
   Sapiens_bru
 
7 - 06.02.18 - 20:55
+(6)
Предложенный вариант делает именно то что просили, вырезает из строки первую скобку и всё что за ней.
Но если я такой код увижу в реальной базе, первым кину камень в кодера. Хотя бы из-за резкой просадке в производительности при выполнении этого монстра.

По сути что происходит в запросе:
Первая ВТ состоит тупо из 10 цифр по порядку.

Вторая ВТ получается перемножением двух первых на себя. Так происходит, если не указана связь между таблицами. Результат - сто упорядоченных чисел. Чтобы получить тысячу - нужно перемножить три первые таблицы

Третья ВТ перемножает вторую и справочник номенклатуры, нарезая по 1 символу и сразу отбирает те строки, где содержится искомая скобка, причём только первая из них. за это отвечает функция МИНМУМ

Ну и собственно сам запрос склеивает полученную таблицу номеров скобок со справочником номенклатуры.

Код рабочий, собран консолью
   catena
 
8 - 07.02.18 - 05:26
(6)Что-то подобное ради интереса городила(обработка строк напрямую в запросе) и в итоге получился запроса, гарантированно роняющий серверную базу)) Так что осторожнее.

+++(1), часто в справочниках бывает "Наименование" и "Полное наименование", вот их и надо задействовать. Лучше день потерять, потом за пять минут долететь.
   VladZ
 
9 - 07.02.18 - 06:00
(0) " а в этом наименовании в скобочках написано что-то типа комментария, который нужен для удобства пользователей, но нафих не нужен при печати. " - разделяйте реквизиты для печати и для пользователя. См. (8).

"Может есть какой-то хитрый ход с помощью которого можно прямо запросом вырезать лишнюю часть из наименования" - нет никакого хитрого хода. Все просто: есть данные - выводишь их. Нужны данные в другом виде: хранишь в нужном виде и выводишь их там где нужно.
   Dotoshin
 
10 - 07.02.18 - 08:32
(8) (9) Спасибо, понял. Так и сделаю, это самый универсальный путь.
 
 Рекламное место пустует
   lodger
 
11 - 07.02.18 - 10:30
(10) потом, когда вынесешь лишнее из печатного наименования, можно покурить ОбработкаПолученияПредставления() и выбирать куда какие наименования показывать. в списках\выборах одно - в отчетах другое.
   Timon1405
 
12 - 07.02.18 - 10:50
(11) Есть один отчет (древний как г@в№0 мамонта) не коррелирует с ОбработкаПолученияПредставления()

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует