Вторник, 08.10.2024, 02:25
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Редактор объекта БД: Ошибка формата потока
unichkinДата: Вторник, 07.03.2023, 19:42 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 199
Репутация: 37
Статус: Оффлайн
Платформа: 8.3.21.1393
Режим БД: файловый
Конфигурация. Основной режим запуска: Управляемое приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим управления блокировкой данных: Управляемый
Конфигурация. Режим совместимости: Версия8_3_14
Конфигурация. Режим использования синхронных вызовов: ИспользоватьСПредупреждениями
Конфигурация. Версия БСП: 301
Конфигурация. Использовать обычные формы в управляемом приложении: Да
Инструменты разработчика. Версия: Расширение 6.67.2e
Инструменты разработчика. Инструмент: Редактор объекта БД
Инструменты разработчика. Перехват клавиатурного ввода: Да
Инструменты разработчика. Объекты на сервере: Да
Инструменты разработчика. Асинхронность запрещена: Нет
Инструменты разработчика. Разрешены имитаторы: Да
Расширения. ИнструментыРазработчикаTormozit (6.67.2e)
Клиент. Приложение: Управляемое приложение 64б
Клиент. Проверка модальных вызовов: Нет
Клиент. Язык интерфейса конфигурации: ru
Клиент. Язык интерфейса системы: ru
Клиент. Отладка разрешена: Нет
Клиент. Постоянный кэш метаданных: Да
Клиент. ОС: Майкрософт Windows 10 Корпоративная LTSC 64-разрядная Русский
Клиент. ОС от имени администратора: Да
Клиент. ОС Текущая кодовая страница: 866
Клиент. ОС выполнение BAT: Да

Делаю обмен, попал на ситуацию при которой штатная выгрузка/загрузка данных объекта некорректно ведет себя с значениями реквизитов типа "ХранилищеЗначения". Если такой объект выгрузить из базы приемника, и загрузить в источник, то при получении значения получаем ошибку "Ошибка формата потока". Хотел в одной из копий через инструмент редактирования объекта затереть данные хранилища, но редактор объектов такой кейс не учитывает, и при позиционировании на реквизит начинает "моргать" этой самой ошибкой.

Текст ошибки:
Ошибка при вызове метода контекста (Получить)
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(5779)}:ВложенноеЗначение = Значение.Получить();
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(6153)}:Для Каждого Колонка Из КолонкиТаблицы Цикл  Если Не Колонка.Видимость Тогда  Продолжить;  КонецЕсли;  ИмяКолонки = Колонка.Имя;  ИмяКолонкиДанных = Колонка.Данные;  Ячейка = Ячейки[ИмяКолонки];        КартинкаЯчейки = Неопределено;  КолонкаРасширенныхДанных = Неопределено;  Если РасширенныеКолонки <> Неопределено Тогда  РасширенныеКолонки.Свойство(ИмяКолонки, КолонкаРасширенныхДанных);  КонецЕсли;  ПрименятьРежимОтображения = Ложь  Или КолонкиДляРежимаОтображения = Неопределено  Или КолонкиДляРежимаОтображения.Свойство(ИмяКолонки);  КолонкаРедактируетДанныеФлажка = Ложь;  Если КолонкаРасширенныхДанных <> Неопределено Тогда  ЗначениеЯчейки = РасширенныеДанныеСтроки[КолонкаРасширенныхДанных];  Иначе  Если Истина  И Не ЗначениеЗаполнено(ИмяКолонкиДанных)  И ЗначениеЗаполнено(Колонка.ДанныеФлажка)  Тогда  ЗначениеЯчейки = Ячейка.ЗначениеФлажка;  КолонкаРедактируетДанныеФлажка = Не Ячейка.ТолькоПросмотр;  Иначе  ЗначениеЯчейки = Ячейка.Значение;  КонецЕсли;  КонецЕсли;  ТипЗначенияЯчейки = ТипЗнч(ЗначениеЯчейки);  ТипЗначенияЯчейкиXML = XMLТипЗнч(ЗначениеЯчейки);  Если Истина  И Не КолонкаРедактируетДанныеФлажка  И ТипЗначенияЯчейки = Тип("Булево")  И ТипЗнч(Колонка.ЭлементУправления) <> Тип("ПолеВыбора")  Тогда  Если Истина  И Не ЛиОтбражатьПустые  И Не ОтображатьИдентификаторы  И Не КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки)  Тогда  Ячейка.ОтображатьТекст = Ложь;  Иначе  Ячейка.УстановитьТекст("" + ЗначениеЯчейки);  КонецЕсли;  Если Не Ячейка.ТолькоПросмотр И Колонка.ЭлементУправления <> Неопределено И Не ТолькоПросмотрТабличногоПоля Тогда  Ячейка.УстановитьФлажок(ЗначениеЯчейки);  ИначеЕсли Не Ячейка.ОтображатьТекст Тогда  Ячейка.ОтображатьФлажок = Ложь;  Если Колонка.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда  Ячейка.ИндексКартинки = Не ЗначениеЯчейки;  Ячейка.ОтображатьКартинку = Истина;  Иначе  Если ЗначениеЯчейки = Истина Тогда  КартинкаЯчейки = ирКэш.КартинкаПоИмениЛкс("ирФлажокТолькоПросмотр");        КонецЕсли;  КонецЕсли;  КонецЕсли;  КонецЕсли;  ПредставлениеЗначения = "";  Если Истина  И Ячейка.ОтображатьТекст  И Не КолонкаРедактируетДанныеФлажка  И ТипЗначенияЯчейки <> Тип("Строка")  И ЗначениеЯчейки <> Неопределено  И (Ложь  Или РасширенноеПредставлениеХранилищЗначений  Или ТипЗначенияЯчейки = Тип("ОписаниеТипов")  Или РасширенноеПредставлениеДат И ТипЗначенияЯчейки = Тип("Дата")  Или ТипЗначенияЯчейкиXML = Неопределено)  Тогда  ПредставлениеЗначения = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(ЗначениеЯчейки, Колонка,, РасширенноеПредставлениеХранилищЗначений, Ложь);  КонецЕсли;  НовыйЦветФона = Неопределено;  НовыйЦветТекста = Неопределено;  ТекстЯчейки = Ячейка.Текст;  ФорматКолонки = Колонка.Формат;      Если ЛиОтбражатьПустые И ПрименятьРежимОтображения Тогда  Если ТипЗначенияЯчейки = Тип("Строка") Тогда  Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда  ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);  НовыйЦветФона = ЦветФонаПустогоЗначения;  ИначеЕсли ОтображатьИдентификаторы Тогда  ПредставлениеЗначения = """" + ЗначениеЯчейки + """";  КонецЕсли;  ИначеЕсли Не ирОбщий.ЛиКоллекцияЛкс(ЗначениеЯчейки) Тогда  Попытка  ЗначениеНепустое = ЗначениеЗаполнено(ЗначениеЯчейки) И ЗначениеЯчейки <> Ложь;  Исключение  ЗначениеНепустое = Истина;  КонецПопытки;  Если Не ЗначениеНепустое Тогда  ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);  НовыйЦветФона = ЦветФонаПустогоЗначения;  КонецЕсли;  КонецЕсли;  Если Истина  И ТекущееЗначение = ЗначениеЯчейки  И ТипЗнч(ТекущееЗначение) = ТипЗначенияЯчейки  Тогда  НовыйЦветФона = ЦветФонаТекущегоЗначения;  КонецЕсли;  Иначе  Если Истина  И ЗначенияНизкойВажности.Найти(ЗначениеЯчейки) <> Неопределено  И ФорматКолонки = ""  И ИмяКолонки <> "ИдентификаторСсылкиЛкс"  Тогда  Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда  ПредставлениеЗначения = "0";  Иначе  ПредставлениеЗначения = "" + ЗначениеЯчейки;  КонецЕсли;  НовыйЦветТекста = ЦветТекстаПустогоЗначения;  КонецЕсли;    Если Истина  И ЗначениеЗаполнено(СтрокаПоиска)  И ЗначениеЗаполнено(ИмяКолонкиДанных)  И (Ложь  Или КолонкиПоиска = Неопределено  Или КолонкиПоиска.Свойство(ИмяКолонкиДанных))  И ТипЗначенияЯчейкиXML <> Неопределено  И (Ложь  Или ТипЗначенияЯчейки = Тип("Строка")  Или (Истина  И Найти(ТипЗначенияЯчейкиXML.ИмяТипа, "Ref.") > 0  И Не ВсеТипыСсылокДокументов.СодержитТип(ТипЗначенияЯчейки)))  Тогда  Если КолонкиПоиска <> Неопределено Тогда  КолонкаПоиска = КолонкиПоиска[ИмяКолонкиДанных];  Если КолонкаПоиска <> Неопределено Тогда    ВычислительРегВыражений.Pattern = КолонкаПоиска[0];  КонецЕсли;  Иначе  КолонкаПоиска = Неопределено;  КонецЕсли;  Если Ложь  Или КолонкаПоиска <> Неопределено  Или ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекстЯчейки, СловаПоиска)  Тогда  ПредставлениеЗначения = ВычислительРегВыражений.Заменить(ТекстЯчейки, ШаблонРазметкиВхождений);  Если РазрешитьОкраскуПоиска Тогда  НовыйЦветФона = ЦветФонаТекущегоЗначения;  КонецЕсли;  КонецЕсли;  КонецЕсли;  КонецЕсли;    Если НовыйЦветФона <> Неопределено Тогда  Ячейка.ЦветФона = НовыйЦветФона;  КонецЕсли;  Если НовыйЦветТекста <> Неопределено Тогда  Ячейка.ЦветТекста = НовыйЦветТекста;  КонецЕсли;  Если Ячейка.ОтображатьТекст И ПредставлениеЗначения <> "" Тогда  Если Ложь  Или КолонкаРедактируетДанныеФлажка  Или Формат(ЗначениеЯчейки, ФорматКолонки) = ТекстЯчейки  Тогда  Ячейка.УстановитьТекст(ПредставлениеЗначения);  КонецЕсли;  КонецЕсли;  Если Истина  И ОтображатьИдентификаторы  И ПрименятьРежимОтображения  И ТипЗначенияЯчейки <> Тип("Строка")  И ЗначениеЯчейки <> Неопределено  И ЗначениеЯчейки <> Null  Тогда  ИдентификаторСсылки = ирОбщий.СтроковыйИдентификаторЗначенияЛкс(ЗначениеЯчейки, Истина);  Если ИдентификаторСсылки <> Неопределено Тогда  Ячейка.УстановитьТекст(ИдентификаторСсылки);  КонецЕсли;  КонецЕсли;  Если КартинкаЯчейки = Неопределено И КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) Тогда  Если ТипЗначенияЯчейки <> Тип("ПолеКомпоновкиДанных") Тогда  Если Не (Истина  И ТипЗначенияЯчейки = Тип("Булево")  И Ячейка.ОтображатьФлажок)  Тогда  КартинкаТипа = КартинкаТипаЛкс(ТипЗначенияЯчейки);  Если КартинкаТипа <> Неопределено Тогда  КартинкаЯчейки = КартинкаТипа;  КонецЕсли;  КонецЕсли;  КонецЕсли;  КонецЕсли;  Если КартинкаЯчейки <> Неопределено Тогда  Ячейка.УстановитьКартинку(КартинкаЯчейки);  КонецЕсли;  КонецЦикла;
{ИнструментыРазработчикаTormozit Обработка.ирРедакторОбъектаБД.Форма.Форма.Форма(2002)}:ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки, КнопкаИдентификаторы, "ЗначениеРеквизита",
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(6880)}:ТабличноеПоле.ОбновитьСтроки(СтрокиОбновленияОформления1);
{ИнструментыРазработчикаTormozit Обработка.ирРедакторОбъектаБД.Форма.Форма.Форма(5540)}:ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);

по причине:
Ошибка формата потока

Как воспроизвести:
 Создать простенькую конфу с документом и реквизитом типа "ХранилищеЗначения", поместить туда что угодно. Потом выгрузить в XML через штатный сериализатор, и загрузить обратно. У меня это привело к тому что данные хранилища побились, и при открытии объекта получаю указанное исключение.
 
tormozitДата: Четверг, 09.03.2023, 08:23 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Покажи свою выгрузку (base64 значение), которая при загрузке вызывает ошибку. Скорее всего в твоем хранилище значения есть типы данных, связанные с конфигурацией базы-источника, например ссылки. Если такие типы отсутствуют в приемнике, то в таком случае выброс исключения "Ошибка формата потока" является логичным. Но возможно стоит как то облагородить его обработку.
 
unichkinДата: Четверг, 09.03.2023, 08:53 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 199
Репутация: 37
Статус: Оффлайн
Нет, ссылок нет, таблица значений с простыми типами. Кроме того конфигурации источника\приемника идентичны. Выгрузку не покажу, попробую воспроизвести на выходных.
 
tormozitДата: Четверг, 09.03.2023, 09:23 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Тогда покажи XML сериализацию пустой таблицы значений из этого хранилища значения.
 
tormozitДата: Суббота, 11.03.2023, 08:28 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Создал задачу для подавления ошибки https://www.hostedredmine.com/issues/959749
 
tormozitДата: Суббота, 11.03.2023, 11:43 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Исправлено в 6.67.4
 
  • Страница 1 из 1
  • 1
Поиск: