Редактор объекта БД: Ошибка формата потока
|
|
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
|
|
| |