Значение доп. реквизита типа "строка неограниченной длины" обрезается после 1024 символа

1. ovt256 04.08.20 17:18 Сейчас в теме
Добрый день!
Конфигурация УТ 11.4.6, платформа 8.3.16.1224
Есть необходимость в дополнительный реквизит номенклатуры строкового типа с неограниченной длиной записывать JSON-строку.
Если заполнять этот реквзит в карточке номенклатуры руками, то все в порядке. А вот если попытаться присвоить значение программным способом, то строка обрезается:
			Если НовыеРеквизитыСтикераЗаполнены Тогда
				ЗаполнитьЗначенияСвойств(СтарыеРеквизитыСтикера, НовыеРеквизитыСтикера);
				Запись = Новый ЗаписьJSON;
				Запись.УстановитьСтроку();
				ЗаписатьJSON(Запись, СтарыеРеквизитыСтикера);
				НовыйСтикер = Запись.Закрыть();
				Если СтрокаТЧ.РеквизитыСтикера <> НовыйСтикер Тогда
					ЗначениеРеквизита = НовыйСтикер;
					ДопреквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Данные для печати стикера", Истина);
					Отбор = Новый Структура("Свойство", ДопреквизитСсылка);
					СтрокиДопреквизита = Товар.ДополнительныеРеквизиты.НайтиСтроки(Отбор);
					Записать = Ложь;
					Если СтрокиДопреквизита.Количество() = 0 Тогда
						НовыйРеквизит = Товар.ДополнительныеРеквизиты.Добавить();
						НовыйРеквизит.Свойство = ДопреквизитСсылка;
						НовыйРеквизит.Значение = ЗначениеРеквизита; // Обрезается при присвоении 
						ФлагИзменения = Истина;
					ИначеЕсли СтрокиДопреквизита.Количество() = 1 Тогда
						Если Не СтрокиДопреквизита[0].Значение = ЗначениеРеквизита Тогда
							СтрокиДопреквизита[0].Значение = ЗначениеРеквизита;
							ФлагИзменения = Истина;
						КонецЕсли;
					Иначе
						Ошибка = Ошибки.Добавить();
						Ошибка.Артикул = ТоварСсылка.Артикул;
						Ошибка.Реквизит = "Данные для печати стикера";
						Ошибка.Ошибка = "Ошибка: у номенклатуры более одного значения реквизита.";
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
Показать

Может, кто сталкивался с подобным или в строку с неограниченной длиной как-то по особенному надо записывать значение?
Найденные решения
6. mqwe 05.08.20 08:06 Сейчас в теме
Используйте реквизит "ТекстоваяСтрока". Ответ в infostart
espero; Stref75; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Stref75 05.08.20 07:11 Сейчас в теме
(1) полагаю, обрезает потому, что задана длина строки для ПланаВидовХарактеристик
Прикрепленные файлы:
5. ovt256 05.08.20 08:04 Сейчас в теме
(3)
Вероятно, Вы правы, но как тогда объяснить, что при ручном редактировании дополнительного реквизита с помощью формы элемента никаких ограничений на длину строки не налагается?
2. RustRR 04.08.20 17:53 Сейчас в теме
Для начала лучше выкинуть этот велосипед и использовать УправлениеСвойствами.ЗаписатьСвойстваУОбъекта.
4. ovt256 05.08.20 07:56 Сейчас в теме
(2)
Спасибо за подсказку, велосипед переделал:
			Если НовыеРеквизитыСтикераЗаполнены Тогда
				ЗаполнитьЗначенияСвойств(СтарыеРеквизитыСтикера, НовыеРеквизитыСтикера);
				Запись = Новый ЗаписьJSON;
				Запись.УстановитьСтроку();
				ЗаписатьJSON(Запись, СтарыеРеквизитыСтикера);
				НовыйСтикер = Запись.Закрыть();
				Если СтрокаТЧ.РеквизитыСтикера <> НовыйСтикер Тогда
					ДопреквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Данные для печати стикера", Истина);
					СтарыйСтикер = УправлениеСвойствами.ЗначениеСвойства(ТоварСсылка, ДопреквизитСсылка);
					Если СтарыйСтикер <> НовыйСтикер Тогда
						ТаблицаНовыхЗначений = Новый ТаблицаЗначений;
						ТаблицаНовыхЗначений.Колонки.Добавить("Свойство");
						ТаблицаНовыхЗначений.Колонки.Добавить("Значение");
						НовоеЗначение = ТаблицаНовыхЗначений.Добавить();
						НовоеЗначение.Свойство = ДопреквизитСсылка;
						НовоеЗначение.Значение = НовыйСтикер;
						УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ТоварСсылка, ТаблицаНовыхЗначений); 
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
Показать

но результат тот же, обрезает(
6. mqwe 05.08.20 08:06 Сейчас в теме
Используйте реквизит "ТекстоваяСтрока". Ответ в infostart
espero; Stref75; +2 Ответить
7. ovt256 05.08.20 08:31 Сейчас в теме
(6)
Гениально! Как Вы это нашли?! Два дня лазил по интернету - все в пустую!
Да, это решение! Пришлось, правда, вернуть велосипед на место (прошу прощения у RustRR, УправлениеСвойствами обязательно возьму на вооружение!):
			Если НовыеРеквизитыСтикераЗаполнены Тогда
				ЗаполнитьЗначенияСвойств(СтарыеРеквизитыСтикера, НовыеРеквизитыСтикера);
				Запись = Новый ЗаписьJSON;
				Запись.УстановитьСтроку();
				ЗаписатьJSON(Запись, СтарыеРеквизитыСтикера);
				НовыйСтикер = Запись.Закрыть();
				Если СтрокаТЧ.РеквизитыСтикера <> НовыйСтикер Тогда
					ДопреквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Данные для печати стикера", Истина);
					ЗначениеРеквизита = НовыйСтикер;
					Отбор = Новый Структура("Свойство", ДопреквизитСсылка);
					СтрокиДопреквизита = Товар.ДополнительныеРеквизиты.НайтиСтроки(Отбор);
					Записать = Ложь;
					Если СтрокиДопреквизита.Количество() = 0 Тогда
						НовыйРеквизит = Товар.ДополнительныеРеквизиты.Добавить();
						НовыйРеквизит.Свойство = ДопреквизитСсылка;
						НовыйРеквизит.Значение = ЗначениеРеквизита;
						НовыйРеквизит.ТекстоваяСтрока = ЗначениеРеквизита;
						ФлагИзменения = Истина;
					ИначеЕсли СтрокиДопреквизита.Количество() = 1 Тогда
						Если Не СтрокиДопреквизита[0].Значение = ЗначениеРеквизита Тогда
							СтрокиДопреквизита[0].Значение = ЗначениеРеквизита;
							СтрокиДопреквизита[0].ТекстоваяСтрока = ЗначениеРеквизита;
							ФлагИзменения = Истина;
						КонецЕсли;
					Иначе
						Ошибка = Ошибки.Добавить();
						Ошибка.Артикул = ТоварСсылка.Артикул;
						Ошибка.Реквизит = "Данные для печати стикера";
						Ошибка.Ошибка = "Ошибка: у номенклатуры более одного значения реквизита.";
					КонецЕсли;
					
					//СтарыйСтикер = УправлениеСвойствами.ЗначениеСвойства(ТоварСсылка, ДопреквизитСсылка);
					//Если СтарыйСтикер <> НовыйСтикер Тогда
					//	ТаблицаНовыхЗначений = Новый ТаблицаЗначений;
					//	ТаблицаНовыхЗначений.Колонки.Добавить("Свойство");
					//	ТаблицаНовыхЗначений.Колонки.Добавить("Значение");
					//	НовоеЗначение = ТаблицаНовыхЗначений.Добавить();
					//	НовоеЗначение.Свойство = ДопреквизитСсылка;
					//	НовоеЗначение.Значение = НовыйСтикер;
					//	УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ТоварСсылка, ТаблицаНовыхЗначений); 
					//КонецЕсли;
				КонецЕсли;
			КонецЕсли;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот