Имя: Пароль:
1C
 
Ошибка в соединении строк в запросе
0 program345
 
04.06.25
12:30
привет!
Есть вычисляемое поле:

"КПП" + ПОДСТРОКА(Контрагенты.ИННиКПП, СТРНАЙТИ(Контрагенты.ИННиКПП, "/") + 1, ДЛИНАСТРОКИ(Контрагенты.ИННиКПП))

реквизит Контрагенты.ИННиКПП текстовый,20

вычленяю КПП и добавляю имя, но выходит ошибка, как победить?
1 Fish
 
гуру
04.06.25
12:30
А подстрока точно что-то возвращает? Null там может быть?
2 program345
 
04.06.25
12:36
(1)
3 alexshape
 
04.06.25
12:43
Попробуй:
"КПП" +
ЕСЛИ(СТРНАЙТИ(Контрагенты.ИННиКПП, "/") > 0,
    ПОДСТРОКА(Контрагенты.ИННиКПП, СТРНАЙТИ(Контрагенты.ИННиКПП, "/") + 1),
    ""
)
4 program345
 
04.06.25
12:52
(3)
5 program345
 
04.06.25
13:11
Причем странно если делаю поле:

"КПП " + ПОДСТРОКА(Контрагенты.ИННиКПП, СТРНАЙТИ(Контрагенты.ИННиКПП, "/") + 1, 9)

то все работает


походу я третим параметром передаю значение 20, что больше длины строки, т.к. начинаю вырезать строку не с 1. Хотя так тоже не прокатывает : "243"+ПОДСТРОКА(Контрагенты.ИННиКПП, 1, ДЛИНАСТРОКИ(Контрагенты.ИННиКПП)) - та же ошибка.


(3) Спасибо, но я работаю в синтаксисе Языка запросов, а не в синтаксисе встроенного языка.
6 Волшебник
 
04.06.25
13:13
Надо разделить ИНН и КПП на 2 поля.
7 arsik
 
гуру
04.06.25
13:17
(7) это похоже на наследие 77
8 Мультук
 
гуру
04.06.25
13:20
(5)

>>Спасибо, но я работаю в синтаксисе Языка запросов, а не в >>синтаксисе встроенного языка.

Говорят в 1С, в языке запросов, ЕСЛИ КОНЕЦ называется
ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ

Наверное, п@здят


ВЫБОР КОГДА СТРНАЙТИ(Контрагенты.ИННиКПП, "/") > 0 ТОГДА  ПОДСТРОКА(Контрагенты.ИННиКПП, СТРНАЙТИ(Контрагенты.ИННиКПП, "/") + 1, 50) ИНАЧЕ  "" КОНЕЦ



P.S.

Для экспериментов, если кому интересно.
Возвращается строка, но "какая-то не такая строка", наверное

ВЫБРАТЬ ПЕРВЫЕ 1
	Контрагенты.ИНН КАК ИНН,
	Подстрока(Контрагенты.ИНН, 0, ДлинаСтроки(Контрагенты.ИНН)),
	ТипЗначения(Подстрока(Контрагенты.ИНН, 0, ДлинаСтроки(Контрагенты.ИНН))), 
	ДлинаСтроки(Контрагенты.ИНН),
	ВЫБОР КОГДА СТРНАЙТИ(Контрагенты.ИНН, "0") > 0 ТОГДА  ПОДСТРОКА(Контрагенты.ИНН, СТРНАЙТИ(Контрагенты.ИНН, "0") + 1, 50) ИНАЧЕ  "" КОНЕЦ
ИЗ
	Справочник.Контрагенты КАК Контрагенты      
ГДЕ 
	Контрагенты.ИНН <> ""	
9 program345
 
04.06.25
13:22
(6) это учебный пример
10 program345
 
04.06.25
13:28
(8) так если возвращается типЗнч строка, почему не работает конкатенация?
11 Ёпрст
 
гуру
04.06.25
13:35
(10) потому, что там нет явного каст или конверт. Оберни своё г в подзапрос или времянку и снаружи уже добавь че те ннадо.
12 program345
 
04.06.25
13:45
(11) беру


ПОДСТРОКА(Контрагенты.ИННиКПП, СТРНАЙТИ(Контрагенты.ИННиКПП, "/") + 1, ДЛИНАСТРОКИ(Контрагенты.ИННиКПП))

кидаю в ВТ,

В ВТ делаю поле "КПП " + ВТ.это
выходит опять неверные параметры "+". Походу баг 1с.
13 Маленький Вопросик
 
04.06.25
13:47
попробуй через выразить
14 Мультук
 
гуру
04.06.25
13:51
(12)

В (3) тебе дали конкретный ответ.
В (5) я превратил этот ответ в работающий код

Даже жевать не нужно.

Что еще не так то?
15 arsik
 
гуру
04.06.25
13:53
(12) У тебя скорее всего поле неограниченной длины
16 Мультук
 
гуру
04.06.25
13:59
(15)

Всё это чудесно воспроизводится на УТ/ЕРП, где ИНН строка конечной длины

Запрос в (5)

Работает
"ЛЯЛЯ" + Подстрока(Контрагенты.ИНН, 1, ДлинаСтроки(Контрагенты.ИНН))

Не работает
"ЛЯЛЯ" + Подстрока(Контрагенты.ИНН, 0, ДлинаСтроки(Контрагенты.ИНН))
17 arsik
 
гуру
04.06.25
14:15
(16) Так у тебя длина строки скорее всего 0. Ну точнее пустая строка там хранится.
18 program345
 
04.06.25
14:24
(16) а так работает?

"ЛЯЛЯ" + Подстрока(Контрагенты.ИНН, 3, ДлинаСтроки(Контрагенты.ИНН))


___________________________________________________________________

не знаю как у тебя работает код
"ЛЯЛЯ" + Подстрока(Контрагенты.ИНН, 1, ДлинаСтроки(Контрагенты.ИНН))

у меня такой код не работает:
"ЛЯЛЯ" + Подстрока(Контрагенты.Наименование, 1, ДлинаСтроки(Контрагенты.Наименование))   8.3.27.1508
19 Ботаник Гарден Меран
 
04.06.25
15:11
ТС нашел видимо ошибку в платформе.

Выбрать
    ЛЕВ(КПП, 3) КАК Поле1,
    ПОДСТРОКА(КПП, 1, 9) КАК Поле2
ИЗ Справочник.Контрагенты 

работает. А

Выбрать
    ЛЕВ(КПП, 3) + ПОДСТРОКА(КПП, 1, 9) КАК ПолеИОшибка
ИЗ Справочник.Контрагенты 

Выдает аналогичную ТС ошибку.
В 8.2 была ошибка с функцией ПОДСТРОКА, когда возвращался Null.
20 Мультук
 
гуру
04.06.25
15:21
(18)

8.3.25.1546

Наименование контрагента в примере -  13 символов

                                      
                                        
ВЫБРАТЬ ПЕРВЫЕ 1
	Контрагенты.ИНН КАК ИНН,                          
	Контрагенты.Наименование,
	ДлинаСтроки(Контрагенты.Наименование),
	ДлинаСтроки(Контрагенты.Наименование) -10,             
	"КАК " + Подстрока(Контрагенты.Наименование, 10, ДлинаСтроки("123") ) КАК ТакМожно,
	"КАК " + Подстрока(Контрагенты.Наименование, 10, 3) КАК иТакМожно,
	"КАК " + Подстрока(Контрагенты.Наименование, 10, 10000)  КАК ТакТожеМожно,
	
	//"КАК " + Подстрока(Контрагенты.Наименование, 10, ДлинаСтроки(Контрагенты.Наименование) -10)  КАК АТакНельзя,                        
	"КАК " + ВЫРАЗИТЬ(Подстрока(Контрагенты.Наименование, 10, ДлинаСтроки(Контрагенты.Наименование) -10) КАК Строка(100))  КАК НоВотТакУжеМожно
	
ИЗ
	Справочник.Контрагенты КАК Контрагенты