Имя: Пароль:
1C
 
Преобразование числа в строку в запросе
0 Александр_
Тверь
 
13.01.09
09:17
Привет всем! Тема когда-то вроде обсуждалась, но как-то совершенно вяло и невнятно.

Задача в запросе числовое поле преобразовать в строковое и добавить его к строке. По типу:

Выбрать
12 +"34"

В результает хочется получить строку "1234"

(выразить и представление тоже пробовал)

Вобщем преобразование такого типа никак не получается, с чем связано  проблема не понятно, на сколько я знаю на SQL такая задача решается без проблем.

Есть идеи? Может я что-то упустил?
1 Stepa86
 
13.01.09
09:20
в запросе конкатенация строк работает только если поля строковые изначально, вроде бы... легче через код делать
2 Александр_
Тверь
 
13.01.09
09:22
Задача подразумевает необходимость сделать именно через запрос :(
Интересно, с чем связано данное ограничение?
3 Serg_1960
 
13.01.09
09:26
(2) А зачем? Вам хочется в запросе все свои "проблемы" решить? Лучше алгоритм измените - без потребности в преобразовании...
4 Александр_
Тверь
 
13.01.09
09:35
(3) хе хе, табличная часть документа "Отчет о розничных продадах" содержит дополнительное поле "номер чека". Если не вдаваться в подробности, то для проведения анализа продаж с выводом коэфициента продаж зависящего от количества чеков (иногда требуется посмотреть именно номер чека), необходимо обеспечить уникальность этого номера. Один из вариантов, это к номеру чека добалять номер документа и год (т.к. номер документа имеет периодичность в год), что позволило бы без проблем получить необходимую отчетность без необходимости изменения соответствующих регистров и формирования заново проводок.
5 Александр_
Тверь
 
13.01.09
09:37
(3) тем более хотелось бы узнать с чем связано данное ограничение, т.к. оно существует только для 1С, SQL без проблем позволяет решить аналогичную задачу.
6 selenat
 
13.01.09
09:43
7 Stepa86
 
13.01.09
09:43
у 1С многого чего нет от SQL, очень многого
8 DmitrO
 
13.01.09
09:46
(3) Ограничение связано с тем, что преобразование числа в строку зависит от региональных настроек текущего пользователя (группировка разрядов, разделитель групп разрядов, разделитель десятичной части, представление нуля), в запросах (т.е. на сервере БД) этот механизм платформой не реализован. Сервер БД конечно же умеет это делать но не так как определено в настройках локали 1С для текущего пользователя, и 1С исходит из того, что разные сервера возможно будут это делать по разному.
9 Александр_
Тверь
 
13.01.09
09:47
(6) Спасибо за информацию!
В моем конкретно случае можно решить проблему проще, просто используя условия.
Однозначно не радует данное ограничение.
10 Александр_
Тверь
 
13.01.09
09:48
(8) пардон, а вот есть возможность использовать ПРЕДСТАВЛЕНИЕ(12) - что в таком случае возвращает оно? почему то что возвращается данной функцией нельзя рассматривать как строку в запросе 1с?
11 DmitrO
 
13.01.09
09:50
8+ это для (5)
12 Garkin
 
13.01.09
09:51
(4) ты хочешь обеспечить уникальность 1 полем, ну обеспечь ее двумя "ДокументОтчетРозничныхПродаж" и "НомерЧека", какая разница, полем больше, полем меньше?
13 DmitrO
 
13.01.09
09:52
Функция ПРЕДСТАВЛЕНИЕ работает на клиенте, а не на сервере.
14 selenat
 
13.01.09
09:52
(10) в запросе ПРЕДСТАВЛЕНИЕ не есть строка, насколько помню. ОНа становится строкой позже. Так что не поможет...
15 DmitrO
 
13.01.09
09:53
13+ имеется в виду сервер БД и клиент сервера БД.
16 DmitrO
 
13.01.09
10:03
13+
По сути дела, применение функции ПРЕДСТАВЛЕНИЕ в запросе (ее можно применять только в конечных полях результата запроса (в самом верхнем ВЫБРАТЬ)) это вот что:
1. Поле получаемое в запросе (аргумент функции ПРЕДСТАВЛЕНИЕ) получается (приходит) с сервера БД как есть, того типа которое получится на сервере (это может быть несколько полей в случае использования составных типов).
2. Поле в результате запроса (РзультатЗапроса) будет всегда типа Строка, полученное формированием основного представления значения в виде строки.
3. При формировании основного представления в процессе формирования данных объекта РезультатЗапроса будет использовано кеширование.
17 Stepa86
 
13.01.09
10:06
(16) у меня сложилось такое впечатление, что Вы являетесь разработчиком 8ки =)
18 Александр_
Тверь
 
13.01.09
10:06
(12) вопрос только в том, как в запросе посчитать количество чеков скажем за год?
19 DmitrO
 
13.01.09
10:07
(17) оно ошибочно, я всего лишь грамотный пользователь.
20 Александр_
Тверь
 
13.01.09
10:07
DmitrO спасибо не знал :)
21 Garkin
 
13.01.09
10:11
(18) как обычно, через  Количество()
22 Александр_
Тверь
 
13.01.09
10:16
(21) вот смотри
Таблица:
Док. Номер чека
1     1
1     2
1     3
2     1
2     2

как получить  в запросе поле содержащее общее количество чеков?
23 Александр_
Тверь
 
13.01.09
10:18
не говоря уже про то, что:
1 это всего лишь одно из многих полей
2 часть полей будет не обязательно будет присутствовать в запросе
3 пользователь будет управлять запросом через Построитель Отчета (т.е. нужна не статичная табличка)
24 DmitrO
 
13.01.09
10:21
(23) сгруппируй по полю Док. и все, не понимаю в чем пролема..
25 Александр_
Тверь
 
13.01.09
10:23
(24) ага, я просто сам себя запутал. Спасибо всем.
26 kumena
 
13.01.09
10:56
Загони номер дока в параметр и складывай
27 Александр_
Тверь
 
13.01.09
11:50
(26) номер дока содержит префикс