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

Да, наверно придется программно обрезать.
6 Sapiens_bru
 
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)
    КОНЕЦ КАК Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ НомераСкобок КАК НомераСкобок
        ПО Номенклатура.Ссылка = НомераСкобок.Ссылка
7 Sapiens_bru
 
06.02.18
20:55
+(6)
Предложенный вариант делает именно то что просили, вырезает из строки первую скобку и всё что за ней.
Но если я такой код увижу в реальной базе, первым кину камень в кодера. Хотя бы из-за резкой просадке в производительности при выполнении этого монстра.

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

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

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

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

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

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

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