0. sm2701 55 06.01.17 16:20 Сейчас в теме

Определение длины текстового реквизита

Допустим, есть справочник, который содержит записи, и нужно узнать, какая максимальная длина у текстового реквизита (будь то Код, Наименование или другой реквизит).

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. olgerd666 41 09.01.17 09:04 Сейчас в теме


(0)
Допустим есть справочник, который содержит записи, и нужно узнать какая максимальная длина у текстового реквизита(будь то Код, Наименование или другой реквизит).


ДлинаРеквизита = Документы.РеализацияТоваровУслуг.ПустаяСсылка().Метаданные().Реквизиты.ДоверенностьНомер.Тип.КвалификаторыСтроки.Длина;
5. sm2701 55 11.01.17 12:11 Сейчас в теме
(1) Вы не поняли задачу. Необходимо определить не длину реквизита, а необходимо определить фактическую максимальную длину значения записанную в этом реквизите.
Например в реквизите задана длина 100 символов. Но по факту максимальная длина значений 50 символов.
7. spacecraft 11.01.17 12:18 Сейчас в теме
(5) просто интересно, где это может пригодиться?
9. sm2701 55 11.01.17 12:28 Сейчас в теме
(7) Перезиливали данные из других источников, и реквизиты создавали длиной на запас, когда все перенесли решили в том числе упорядочить и это.
12. Frogger1971 11.01.17 13:04 Сейчас в теме
(9) через метаданные получаешь все реквизиты, по каждому реквизиту выбираешь максимальное значение СтрДлина() и будет тебе счастье
15. starik-2005 1429 13.01.17 16:33 Сейчас в теме
ВЫБРАТЬ
МАКСИМУМ(
ВЫБОР
...
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(9)) ТОГДА 9
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(8)) ТОГДА 8
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(7)) ТОГДА 7
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(6)) ТОГДА 6
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(5)) ТОГДА 5
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(4)) ТОГДА 4
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(3)) ТОГДА 3
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(2)) ТОГДА 2
КОГДА Реквизит > ВЫРАЗИТЬ(Реквизит КАК Строка(1)) ТОГДА 1
КОНЕЦ) КАК МасксДлина
ИЗ Таблица
Показать
2. SkrAn 1 09.01.17 09:06 Сейчас в теме
Еще и 10SM неужели так цены в 17ом году выросли?)
6. sm2701 55 11.01.17 12:12 Сейчас в теме
(2) Код обработки в открытом виде в этом посте. Скачивать обработку нет никакой необходимости.
3. sstar90 09.01.17 09:17 Сейчас в теме
Забыл указать, что твоя функция не работает для реквизита неограниченной длины
4. KonstB 172 11.01.17 10:36 Сейчас в теме
(0) Как же это развидеть...

Автор Вы не против если я скину твой код на сами знаете какой ресурс? :)
8. Alex_E 1881 11.01.17 12:25 Сейчас в теме
Интересно, а тупо написать
ДлинаСтрокиРеквизита = СтрДлина(СокрЛП(Справочники[ИмяСправочника][ИмяРеквизита]));
не хай фай?
10. kuzev 40 11.01.17 12:33 Сейчас в теме
11. kuzev 40 11.01.17 12:49 Сейчас в теме
(0) попробуйте подставлять значение Сч, вычисляя методом деления пополам, а не простым инкрементом. И временная таблица тоже может помочь. Хоть какая-то оптимизация =)
14. Knych 14 13.01.17 16:04 Сейчас в теме
(11)
Если говорить про оптимизацию, то можно еще не выбирать ссылку, а скажем "1" (все равно проверяется пустой/не пустой результат) ну и все такие ПЕРВЫЕ 1 тоже бы не помешали.


(13) Соглашусь, что запрос в цикле обычно не самая лучшая идея. Однако вариант выбрать все, скажем при количестве элементов в пару миллионов будет по моему гораздо хуже.
13. DrAku1a 1292 12.01.17 03:35 Сейчас в теме
Запрос "Выбрать <ИмяРеквизита> из <Источник>", выполнить, выбрать и пройти циклом по результату делая СтрДлина(СокрЛП()).
Один запрос - один результат.
16. starik-2005 1429 13.01.17 16:55 Сейчас в теме
До 1000 символов можно так одним запросом:
ВЫБРАТЬ
	0 КАК Чис
ПОМЕСТИТЬ ВТ1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ1.Чис + ВТ2.Чис * 10 + ВТ3.Чис * 100 КАК Чис
ПОМЕСТИТЬ ВТ2
ИЗ
	ВТ1 КАК ВТ1,
	ВТ1 КАК ВТ2,
	ВТ1 КАК ВТ3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ВЫБОР
			КОГДА НЕ ПОДСТРОКА(Контрагенты.Наименование, 1, ВТ2.Чис) ПОДОБНО ПОДСТРОКА(Контрагенты.Наименование, 1, ВТ2.Чис - 1)
				ТОГДА ВТ2.Чис
			ИНАЧЕ 0
		КОНЕЦ) КАК МаксимальнаяДлинаСтроки
ИЗ
	Справочник.Контрагенты КАК Контрагенты,
	ВТ2 КАК ВТ2
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день