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

18.12.17

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ПроверкаДлиныКодаИНаименования
.epf 6,73Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

 

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3250    Abysswalker    7    

43

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    6083    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    47919    dimanich70    83    

168

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7218    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    59658    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8995    ke.92@mail.ru    17    

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


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


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

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


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