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