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

18.12.17

Разработка - Универсальные функции

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

Скачать файлы

Наименование Файл Версия Размер
ПроверкаДлиныКодаИНаименования
.epf 6,73Kb
1
.epf 6,73Kb 1 Скачать

Можно сделать разными способами, а можно запросом

ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код > ПОДСТРОКА(Код, 1, ” + Сч +”)
где Сч – число символов, которое перебирается в цикле. Если при очередной смене Сч вернется пустой запрос – значит число символов равно Сч.

 

Функция ОпределитьДлину(ИмяСправочника, ИмяРеквизита)
	
	Запрос = Новый Запрос;
	ЗапросТекст = "ВЫБРАТЬ Ссылка ИЗ Справочник." + ИмяСправочника; 
	
	Сч = 0;
	Пока Истина Цикл
		
		Запрос.Текст = ЗапросТекст + " ГДЕ " + ИмяРеквизита + " > ПОДСТРОКА(" + ИмяРеквизита + ", 1, " + Сч +")";
		Если Запрос.Выполнить().Пустой() Тогда
			Прервать;
		КонецЕсли;
				
		Сч = Сч + 1;
		
	КонецЦикла;
	
	Возврат Сч;
		
КонецФункции

 

См. также

Печать любых непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать любые печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

3480 руб.

22.08.2023    1209    1    4    

3

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    5434    YA_418728146    6    

119

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    14393    112    sapervodichka    106    

123

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    6654    quazare    8    

107

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    8223    milkers    11    

91

Базовые принципы работы с регламентными заданиями подсистем БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем

22.05.2022    14694    quazare    25    

59
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. olegmedvedev 64 09.01.17 09:04 Сейчас в теме


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


ДлинаРеквизита = Документы.РеализацияТоваровУслуг.ПустаяСсылка().Метаданные().Реквизиты.ДоверенностьНомер.Тип.КвалификаторыСтроки.Длина;
Lapitskiy; lexxmaster; anten22; +3 Ответить
5. sm2701 96 11.01.17 12:11 Сейчас в теме
(1) Вы не поняли задачу. Необходимо определить не длину реквизита, а необходимо определить фактическую максимальную длину значения записанную в этом реквизите.
Например в реквизите задана длина 100 символов. Но по факту максимальная длина значений 50 символов.
7. spacecraft 11.01.17 12:18 Сейчас в теме
(5) просто интересно, где это может пригодиться?
9. sm2701 96 11.01.17 12:28 Сейчас в теме
(7) Перезиливали данные из других источников, и реквизиты создавали длиной на запас, когда все перенесли решили в том числе упорядочить и это.
12. Frogger1971 11.01.17 13:04 Сейчас в теме
(9) через метаданные получаешь все реквизиты, по каждому реквизиту выбираешь максимальное значение СтрДлина() и будет тебе счастье
15. starik-2005 2898 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 96 11.01.17 12:12 Сейчас в теме
(2) Код обработки в открытом виде в этом посте. Скачивать обработку нет никакой необходимости.
3. sstar90 09.01.17 09:17 Сейчас в теме
Забыл указать, что твоя функция не работает для реквизита неограниченной длины
4. KonstB 180 11.01.17 10:36 Сейчас в теме
(0) Как же это развидеть...

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


(13) Соглашусь, что запрос в цикле обычно не самая лучшая идея. Однако вариант выбрать все, скажем при количестве элементов в пару миллионов будет по моему гораздо хуже.
13. DrAku1a 1609 12.01.17 03:35 Сейчас в теме
Запрос "Выбрать <ИмяРеквизита> из <Источник>", выполнить, выбрать и пройти циклом по результату делая СтрДлина(СокрЛП()).
Один запрос - один результат.
16. starik-2005 2898 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
Показать
Оставьте свое сообщение