Значение доп. реквизита типа "строка неограниченной длины" обрезается после 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].ТекстоваяСтрока = ЗначениеРеквизита;
							ФлагИзменения = Истина;
						КонецЕсли;
					Иначе
						Ошибка = Ошибки.Добавить();
						Ошибка.Артикул = ТоварСсылка.Артикул;
						Ошибка.Реквизит = "Данные для печати стикера";
						Ошибка.Ошибка = "Ошибка: у номенклатуры более одного значения реквизита.";
					КонецЕсли;
					
					//СтарыйСтикер = УправлениеСвойствами.ЗначениеСвойства(ТоварСсылка, ДопреквизитСсылка);
					//Если СтарыйСтикер <> НовыйСтикер Тогда
					//	ТаблицаНовыхЗначений = Новый ТаблицаЗначений;
					//	ТаблицаНовыхЗначений.Колонки.Добавить("Свойство");
					//	ТаблицаНовыхЗначений.Колонки.Добавить("Значение");
					//	НовоеЗначение = ТаблицаНовыхЗначений.Добавить();
					//	НовоеЗначение.Свойство = ДопреквизитСсылка;
					//	НовоеЗначение.Значение = НовыйСтикер;
					//	УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ТоварСсылка, ТаблицаНовыхЗначений); 
					//КонецЕсли;
				КонецЕсли;
			КонецЕсли;
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)