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

18.12.17

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

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

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

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

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

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

 

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

 

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2664    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4595    atdonya    22    

45

Переоткрытие внешних обработок

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

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

30.11.2023    3956    ke.92@mail.ru    16    

61

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

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

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

28.08.2023    8802    YA_418728146    6    

141

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

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

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

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

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

1 стартмани

13.10.2022    16140    133    sapervodichka    112    

129

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

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

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

18.07.2022    7242    quazare    8    

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


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


ДлинаРеквизита = Документы.РеализацияТоваровУслуг.ПустаяСсылка().Метаданные().Реквизиты.ДоверенностьНомер.Тип.КвалификаторыСтроки.Длина;
Lapitskiy; lexxmaster; anten22; +3 Ответить
5. sm2701 99 11.01.17 12:11 Сейчас в теме
(1) Вы не поняли задачу. Необходимо определить не длину реквизита, а необходимо определить фактическую максимальную длину значения записанную в этом реквизите.
Например в реквизите задана длина 100 символов. Но по факту максимальная длина значений 50 символов.
7. spacecraft 11.01.17 12:18 Сейчас в теме
(5) просто интересно, где это может пригодиться?
9. sm2701 99 11.01.17 12:28 Сейчас в теме
(7) Перезиливали данные из других источников, и реквизиты создавали длиной на запас, когда все перенесли решили в том числе упорядочить и это.
12. Frogger1971 11.01.17 13:04 Сейчас в теме
(9) через метаданные получаешь все реквизиты, по каждому реквизиту выбираешь максимальное значение СтрДлина() и будет тебе счастье
15. starik-2005 3033 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 99 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 2353 11.01.17 12:25 Сейчас в теме
Интересно, а тупо написать
ДлинаСтрокиРеквизита = СтрДлина(СокрЛП(Справочники[ИмяСправочника][ИмяРеквизита]));
не хай фай?
10. kuzev 47 11.01.17 12:33 Сейчас в теме
11. kuzev 47 11.01.17 12:49 Сейчас в теме
(0) попробуйте подставлять значение Сч, вычисляя методом деления пополам, а не простым инкрементом. И временная таблица тоже может помочь. Хоть какая-то оптимизация =)
14. Knych 23 13.01.17 16:04 Сейчас в теме
(11)
Если говорить про оптимизацию, то можно еще не выбирать ссылку, а скажем "1" (все равно проверяется пустой/не пустой результат) ну и все такие ПЕРВЫЕ 1 тоже бы не помешали.


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