Имя: Пароль:
1C
1С v8
Как в запросе или в СКД преобразовать число в строку без пробелов
,
0 Alive
 
09.08.20
09:08
Доброго времени суток!! Суть вопроса: имеется документ с табличной частью с реквизитом ШтрихкодДок (например 200 000 576 241), тип данных Число. И есть Регист сведений,с ресурсами Ссылка (ссылка на нужный нам документ) и Штрихкод ( но тип данных уже Строка без пробелов, тут будет 200000576241). Необходимо выполнить объединение документа с регистром, но в запросе не знаю как выразить ШтрихкодДок как строка и без пробелов, чтобы сделать внутреннее соединение по Документ.ШтрихкодДок  = Регист.Штрихкод . Возможно это можно сделать в СКД, через вычисляемые поля, но тогда тоже вопрос, как сделать соединение по вычисленному полю?Подскажите пожалуйста!!
[url=https://radikal.ru][img]https://c.radikal.ru/c34/2008/f3/04a41334b636.png[/img][/url]
1 Timon1405
 
09.08.20
09:12
см. ПОДСТРОКА() в запросе
2 Alive
 
09.08.20
09:14
3 Alive
 
09.08.20
09:14
(1) ПОДСТРОКА работает только со строками на сколько я знаю. У нужного мне реквизита тип ЧИСЛО.
4 ReaLg
 
09.08.20
09:25
(0) "Сконирование" - это пять, конечно. Судя по названию - это все самописное. Почему бы архитектору системы не привести данные к одинаковым типам?
5 Voronve
 
09.08.20
09:26
ВЫРАЗИТЬ(_ЗаказыСОШтрихкоды.barcode КАК Строка(13)) КАК Штрихкод

1. Пиши кусок запроса текстом а не картинкой - перебивать приходиться руками
https://pbs.twimg.com/media/D3X2uT3WkAAvhPP.jpg
2. не сконирование пишеться через А. скАнированиея
6 ДенисЧ
 
09.08.20
09:36
(5) Это ты число к строке в запросе приводишь? Красава...
7 youalex
 
09.08.20
09:42
(0) А числовое поле сделать в регистре - не вариант?

А так, в СКД есть Формат(), т.е, в твоем примере Формат(200000576241, "ЧГ=") = "200000576241". Ну, такое.
Еще можно экспортную функцию общего модуля использовать (не лучше)
8 Alive
 
09.08.20
10:43
(4) Это было уже написано до меня и используется во многих местах. Пока руки не дошли до исправления грамматических ошибок.
9 Alive
 
09.08.20
10:44
(7) не вариант, в регист идет запись не только числовых значений, но и строковых.
10 Alive
 
09.08.20
10:45
(5) Выразить не работает для числового поля. По поводу скАнирования, не моя это доработка. С меня требуется отчет по уже давно дописанному механизму.
11 ДенисЧ
 
09.08.20
10:47
(8) Сделай ещё одно поле и в призаписи набора копируй туда значение, преобразовав его в число.. Если уж так очень надо.
12 Alive
 
09.08.20
10:49
(7) а как "вариант" тогда? думаю уже перебором результата запроса перевести Число в Строку и потом загнать обратно во врменную таблицу, но тоже так себе вариант мне кажется.
13 youalex
 
09.08.20
10:54
(12) Вариант - в (11)
14 Alive
 
09.08.20
10:57
(13) тогда надо еще все записи регистра переписывать, неужели нет других способов число в строку преобразовать...
15 youalex
 
09.08.20
11:05
(14) Все остальное (Формат(), функция ОМ и твой вариант) - костыли, имхо.  
лучше день потерять потом за пять минут долететь
16 Alive
 
09.08.20
11:19
(15) понятно, спасибо, буду думать
17 sdf
 
09.08.20
14:17
18 PR
 
09.08.20
14:22
(3) Не смотри (1), дяденька не в теме
А по сабжу гугли Мисту, миллион раз было, как в запросе через жопу сделать строку из числа
Не через жопу никак не получится
19 PR
 
09.08.20
14:24
А вообще за ШтрихкодДок тип данных Число нужно пальцы ломать, чтобы человек программировать не мог
20 PR
 
09.08.20
14:25
+(18), а, да, (5) тоже не читай, этот дяденька тоже не в теме
21 PR
 
09.08.20
14:27
(8) Добавь поле ШтрихкодДокСтрокойКакИПолагается, сделай автозапись его при записи объекта и заполни старые, потом у себя используй его
Начальству лениво доложи, что какой-то мудак сделал говно, спроси, исправлять тебе или оставить как есть и вставить костыль
22 PR
 
09.08.20
14:28
(11) LOL
23 Ненавижу 1С
 
гуру
09.08.20
14:35
(21) поддерживаю идею с новым реквизитом и его автозаполнением в событии перед записью.

По второй части: начальству пох на строки и числа - им цифры подавай
24 fisher
 
10.08.20
09:18
(0) Сделать ключевое поле, по которому нельзя соединить таблицы - это мощно. Очевидно, что ошибка в консерватории и надо править архитектуру.
А так - в запросе 1С преобразование типов сделать нельзя. СКД тоже не поможет (на уровне представления данных там это сделать можно, но для соединения - нет).
Ну, есть еще "академические" запросы по подобному преобразованию специально для выявления безумцев, которые осмелятся подобное в продакшн засунуть.
25 программистище
 
10.08.20
09:35
А форматнуть его в строку религия не позволяет?!
26 Krolik Bezobraznik
 
10.08.20
09:38
(0) А по ссылке на документ нельзя объединить?
27 fisher
 
10.08.20
09:42
(25) В запросах 1С - платформа не позволяет. Нет такой возможности. А вот если бы платформа позволяла, то делать соединение потенциально больших таблиц по вычисляемому полю мне бы уже не позволила религия. Вероятно, разработчики платформы таким образом пытаются обращать неразумных атеистов в правильную религию.
28 rsv
 
10.08.20
10:10
(0) в 1с скулевый cast обрезан по приведению типов.
А так в идеале в подзапросе преобразовать и соединить
29 palsergeich
 
10.08.20
10:17
Нинада этим онанизмом в запросе заниматься.
Тупой РС строковое представление ШК и подписка на запись документа и несколько строчек простого кода решат все проблемы.
30 youalex
 
10.08.20
10:30
(24) >>СКД тоже не поможет ... но для соединения - нет

Формат() в принципе, работает в соединениях.
31 fisher
 
10.08.20
11:29
(30) Хм... Действительно, работает. Ты прав. Почему-то считал, что нет.
32 ДенисЧ
 
10.08.20
11:32
(30) Таак...
То есть я делаю два набора, в одном строка, в другом число. А потом в соединении наборов указываю Формат(н1.ДанныеЧисло, ".....") = н2.ДанныеСтрока?

Нифига себе...

Или я не так понял?
33 youalex
 
10.08.20
11:36
(32) Да. Не самая очевидная фича)
34 ДенисЧ
 
10.08.20
11:38
Хм, и правда, выражения в соединениях наборов работают...

Правда, как на скорости это скажется...
35 fisher
 
10.08.20
12:29
(34) Думаю, никак особо не скажется. Соединения наборов все равно же постобработкой делаются. В худшем случае будет лишний проход для вычисления выражения соединения. А может и его не будет. Соединения наборов, думаю, оптимизировали как могли - по максимуму.
36 PR
 
10.08.20
13:28
(34) То, что это работает средствами СКД, было и так понятно
Средствами СКД вообще много чего можно, даже текущую дату можно получить
Но решать проблему из (0) именно в описанной постановке средствами СКД — это лютый зашквар, даже запрос в цикле не так зашкварен, зашкварнее, пожалуй, только одинесный GOTO, как он там называется, Перейти, вроде
37 программистище
 
10.08.20
16:49
(25) я про данные, а не запрос
смысл держать штрихкод числом?
38 sitex
 
naïve
10.08.20
16:57
(36) чем Перейти то не угодило ?
39 fisher
 
10.08.20
17:59
(38) Тем, что и без него одинэсники пишут код так, что читать решительно невозможно. А с ним так вообще сплошная обфускация получается. Легче вообще забрать этот инструмент, чем оставлять ради единичных случаев адекватного применения.
40 wolk
 
10.08.20
20:56
(5) "2. не сконирование пишеться через А. скАнированиея"

Не "пишеться", а "пишеТСЯ", в данном случае без мягкого знака