несериализуемые данные 1с что это

Особенности использования сериализации

В 1С:Предприятии для многих типов значений предусмотрена возможность сериализации, то есть сохранения их в том виде, который позволяет записывать значения и потом восстанавливать их. В документации по встроенному языку в описании объектов возможность сериализации указывается отметкой «Сериализуется».

Сериализация предназначена для сохранения значений используемых в рамках информационной базы 1С:Предприятия, в тех случаях, когда их по той или иной причине необходимо хранить или передавать в сериализованном виде.

Следует отметить, что в этом разделе речь идет о сериализации, а не о ХМ L – сериализации. XML – сериализация является отдельной возможностью, предназначенной прежде всего для обмена данными между различными информационными базами 1С:Предприятия, а также для обмена с другими программными системами. Возможность ХМ L – сериализации объектов указывается в документации отдельно.

Существует несколько механизмов 1С:Предприятия, которые используют возможность сериализации значений.

Сохранение значения в файл и восстановление значений из файла


Сохранение значений в объекте типа ХранилищеЗначения

Эта возможность используется, прежде всего, для записи в информационную базу различных значений, для которых не предусмотрено соответствующих типов полей. Например, таким способом сохраняются картинки, образы файлов. При помещении значения в хранилище значения может использоваться сжатие. Подробнее с этой возможностью рекомендуется ознакомиться в разделе «Хранение данных в полях типа ХранилищеЗначения».

Сохранение параметров пользователя между сеансами


Сохранение значения в строку и восстановление значения из строки

Следует учитывать, что формат сериализации является внутренним специфическим форматом 1С:Предприятия и не предназначен для разбора другими средствами.

Не рекомендуется разбирать каким-либо способом полученные сериализованные значения, кроме непосредственно восстановления их штатными средствами.

Следует учитывать, что при сериализации используется внутренняя идентификация типов значений. При этом идентификация типов прикладных объектов опирается на внутренние идентификаторы, хранящиеся в метаданных и, соответственно, сериализованные значения не могут восстанавливаться в другой информационной базе, даже если состав метаданных по именам и значениями свойств полностью совпадает с исходной конфигурацией.

Таким образом, сериализацию следует использовать для хранения и передачи значений в рамках информационной базы 1С:Предприятия и не следует использовать для обмена с другими информационными базами и другими программными системами.

Источник

Заметки из Зазеркалья

Реализовано в версии 8.3.7.1759.

Некоторое время назад мы рассказывали о том, что в платформе реализованы средства работы с JSON. Потоковая запись/чтение и сериализация примитивных типов и коллекций.

Зачем это нужно

Прежде всего, и в основном, XDTO сериализацию в JSON мы рекомендуем использовать при обмене данными между двумя прикладными решениями 1С:Предприятия. По сравнению с XML формат JSON более компактный, сериализация/десериализация в/из JSON выполняется быстрее. Кроме этого мы предприняли дополнительные меры для того, чтобы сократить объём передаваемых данных.

Кроме обмена между приложениями 1С:Предприятия этот механизм можно использовать и для обмена с внешними системами, готовыми принимать типы данных 1С:Предприятия. Например, XDTO сериализацию в JSON можно использовать для организации собственного HTTP интерфейса прикладного решения. Сервис на платформе 1С:Предприятия будет формировать ответ в памяти в виде строки JSON. А затем передавать её при помощи объекта HTTPСервисОтвет. Реализованный нами механизм сериализации полностью соответствует стандарту JSON. Поэтому внешняя система не должна испытывать каких-либо трудностей с десериализацией.

Использование XDTO сериализации в JSON для других задач видится нам маловероятным. Потому что если внешняя система не готова работать с прикладными типами 1С:Предприятия, то зачем их ей передавать? А если предполагается обмениваться только примитивными типами и коллекциями, то для этой задачи хорошо подходят методы ПрочитатьJSON() и ЗаписатьJSON(), о которых мы рассказывали ранее.

Как это выглядит

Простейший код, выполняющий сериализацию элемента справочника, может выглядеть так:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

В результате будет получен файл JSON следующего содержания:

Десериализацию такого файла можно выполнить следующим кодом:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

В результате будет получен элемент справочника Контрагенты с наименованием Мосхлеб ОАО и кодом 000000012.

Особенности сериализации

Как вы уже могли заметить, сериализация/десериализация выполняется с помощью объекта СериализаторXDTO. Поэтому получаемая структура документа имеет «родовые черты» XML, JSON получается «похожим» на XML. Это оказывает отрицательное влияние и на «читаемость» и на компактность файла. Это своеобразная «плата» за удобства, получаемые от использования XDTO. Если же «чистота» получаемого JSON имеет для вас решающее значение, мы рекомендуем использовать инструменты, о которых мы рассказывали ранее.

Общие принципы сериализации в JSON идентичны XDTO сериализации в XML. В частности:

Кроме этого есть одна важная особенность. В отличие от XML, для записи начала объекта JSON нет необходимости указывать его имя. По этой причине сериализация/десериализация JSON может выполняться одним из двух способов.

Либо при сериализации вы указываете явное назначение типа и потом десериализуете без указания типа считываемого значения:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Либо вы сериализуете в JSON без явного назначения типа. Но тогда тип нужно будет указать при десериализации:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Ещё одна особенность сериализации заключается в том, что мы стремились оптимизировать объём результирующего файла. Поэтому для встроенных типов платформы пространства имен не записываются полностью в отдельном свойстве JSON, а указываются в виде префикса перед типом:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

В данном случае префикс jcfg обозначает пространство имён http://v8.1c.ru/8.1/data/enterprise/current-config. Соответствие префиксов пространствам имён «зашито» в платформу. Поэтому каких-либо трудностей с определениями типов при обмене между приложениями 1С:Предприятия не возникает.

А при обмене с внешними системами, для правильной десериализации типов платформы, внешней системе понадобится полная таблица соответствия. Такая таблица есть, и она опубликована в документации.

Особенности десериализации

Общие принципы десериализации также связаны с использованием механизма XDTO. В частности:

При десериализации у вас есть возможность изменить получаемые данные. Для этого, как и в случае с примитивными типами и коллекциями, вы можете использовать функцию восстановления.

Эта возможность может потребоваться, например, для того, чтобы при переносе данных из одного прикладного решения в другое, заменить в них ссылки на связанные объекты. Так, чтобы после переноса эти данные ссылались уже на объекты новой базы. Или, например, для того, чтобы удалить из данных информацию, имеющую смысл только в исходной базе.

Допустим, в исходной базе описание товара хранится в HTML виде. А в вашей базе достаточно текстового описания, или такое описание вообще не нужно. Потому что у вас будет собственное описание.

Тогда, имея файл следующего содержания:

вы можете при десериализации использовать собственную функцию восстановления, в которой очистить свойство Описание:

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

В результате этого кода будет прочитан объект СправочникОбъект.Товары, у которого реквизит Описание будет содержать пустую строку:

Источник

Сериализация данных 1С

А сейчас немного о самом определении: Сериализация указывает возможность поддержки чтении/записи значений данных.

Когда нам нужно сохранить значения, для дальнейшего его хранения или передачи, в этом случае нам без нее не обойтись, но стоит учитывать, что сериализация данных применима для всех объектов 1С, в описании которых есть пометка «Сериализуется».

Хочется уточнить, что речь идет не только сериализации, применимой в рамках одной базы данных, но и о XML – сериализация. Последняя является отдельной возможностью, и применяется между различными базами данных.

Согласитесь, это неотъемлемая часть 1С, так как очень часто данные в базе нужно сохранять, а тем более если речь идет о передаче данных из одной базы в другую или например, во внешний источник.

Сейчас рассмотрим сериализацию в рамках одной информационной базы.

Для сохранения значений во время сеанса используют методы ЗначениеВФайл() и ЗначениеИзФайла(). Если же нам требуется сохранить данные между сеансами, что удобно для пользователя, чтобы не вводить данные каждый раз на форме, то мы будем использовать методы СохранитьЗначение() и ВосстановитьЗначение(), но стоит обратить внимание что данные методы работают только при корректном завершении работы в программе, если вдруг пк будет обесточен, то значения не сохранятся. Также не стоит забывать о сохранении значений в объекте типа ХранилищеЗначений. Подобный тип используется для картинок, образов файлов, так как для них в конфигурации нет соответствующих типов полей.

Если необходимо сохранить значения в строку и восстановить значения из строки, то для этого используются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Эти методы реализованы в основном для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать их в большинстве случаев не рекомендуется. Для сохранения значений в базу данных рекомендуется использовать, описанный выше, объект типа ХранилищеЗначения, а для получения некоторого строкового идентификатора ссылочного значения можно использовать возможность получения уникального идентификатора ссылки (метод УникальныйИдентификатор()) и соответственно преобразование его к строке.

А теперь немного о XML – сериализации.

Рассмотрим сериализацию на примере объектов xml, потому что они используются чаще всего.

Есть глобальный метод ЗаписатьXML() предназначенный для этого.

Стоит отметить, что значения не всех типов могут быть записаны в формате XML данным методом. Доступные для записи типы данных делятся на на два типа: простые и сложные.

К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:

К первому относятся:

Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы:

Пример кода

Рассмотрим на примере подробнее:

У нас есть таблица значений, которую мы хотим записать в XML:

Пример кода

Надеюсь, моя статья была для Вас полезна. Спасибо, что прочли.

Источник

Поиск несериализуемых значений при помещении в хранилище

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Введение

Известно, что в хранилище значений можно поместить только переменные сериализуемого типа. В документации по встроенному языку и в синтакс-помощнике в описании объектов возможность сериализации указывается отметкой «Сериализуется».

При помещении во временное хранилище значений, сериализация которых не поддерживается, возникает ошибка. Текст ошибки зависит от типа переменной. Рассмотрим подробнее каждый из типов.

Хранилище значения

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Если в качестве помещаемого значения выступает несериализуемый элемент, то проблем не возникает — мы сразу видим, что он не сериализуется и предпринимаем необходимые действия в зависимости от потребности автоматизации.

Если в качестве помещаемого значения выступает сериализуемая коллекция (например, Структура) с вложенными элементами, то поиск конкретного не сериализуемого значения может принести немало хлопот.

Ниже представлена функция, позволяющая определить, где в коллекциях находятся несериализуемые элементы.

Временное хранилище

Здесь казалось бы все по аналогии с хранилищем значения, но возник нюанс: если в качестве данных выступает сериализуемая коллекция с вложенными элементами, сериализация которых не поддерживается, то ошибки не возникает.

Т.е. вот такой код выдает ошибку:

Не знаю, это баг или фича, пока отправил письмо на v8 с просьбой признать ошибку. По результатам ответа, пополню статью.

В нижепредставленной функции организована проверка и на помещение во временное хранилище. Т.к. механизм очевидно другой, то реализован специальный параметр, который явно указывает какое хранилище проверяем.

Функции поиска несериалиуемого значения

Их две. Первая — собственно вызов с передачей проверяемого объекта:

Вторая — служебная рекурсия для определения путей несериализуемых объектов:

Источник

XDTO-сериализация в 1С

В прошлой статье я рассказывал о том, что такое XDTO в 1С, для чего этот механизм нужен и как его использовать.

Сегодня я попробую рассказать о еще одном применении механизма XDTO, а именно об XDTO-сериализации.

Для начала рассмотрим простой случай: предположим у нас есть две конфигурации, и эти две конфигурации имеют одинаковые по структуре объекты, например, справочники (одинаковыми должны быть названия объектов, а также названия, количество и типы реквизитов).

В этом случае передать данные из одной конфигурации в другую достаточно просто.

После сериализации у нас получается вот такой файл:

А после десериализации у нас будет ссылка на тот же самый объект в другой конфигурации.

Нужно заметить, что XDTO-сериализации подвергаются не только объекты конфигурации (документы, справочники), но и многие объекты встроенного языка (структуры например):

Если же у нам не нужно сериализировать все реквизиты или в принимающей конфигурации нет копии объекта отдающей конфигурации, то тут работает несколько более сложная схема.

На самом деле, я не знаю, как выполнить эту задачу при помощи объекта «СериализаторXDTO», я пользуюсь только фабрикой, но продолжаю считать этот процесс XDTO-сериализацией. Если Вы знаете более правильный способ, то я с удовольствием его изучу. А сейчас продолжим.

Во-первых нам потребуется XDTO-пакет (или соответствующий XSD-файл) описывающий данные которые мы хотим сериализировать. Для своего справочника я сделал вот такой XDTO-пакет:

Как видно, я хочу чтобы в сериализации участвовали только «Код», «Наименование» и «Реквизит1».

Сама XDTO-сериализация выглядит так:

В коде выше на основании XDTO-пакета создается фабрика, затем тип объекта XDTO, а после этого и сам объект XDTO нужного типа. После заполнения всех нужных свойств, объект записывается в XML-файл:

По очень похожему алгоритму происходит и десериализация объекта:

На выходе мы получаем объект XDTO со свойствами заполненными из файла, дальше мы можем делать с этим объектом все, что нам нужно.

На этом все, буду рад услышать любые дополнения и замечания.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Здравствуйте! Ваш блог нашла поиском по ошибке, кот возникает в конфигурации Витязь (достроенная БГУ) при загрузке комплекта отчетности.
Если Вы так просто рассказываете о непонятной сериализации, то:
Помогите разобраться что происходит и как выпутаться из этой ситуации!

[EESE0000] Поле объекта не обнаружено (СпособыВычисленияПараметровОперандов)
Модуль: Обработка.СериализацияУниверсальнаяОтчетностьМета.МодульОбъекта, Номер строки: 1 514
Модуль: Обработка.ДиспетчерСериализации.МодульОбъекта, Номер строки: 1 042

несериализуемые данные 1с что это. Смотреть фото несериализуемые данные 1с что это. Смотреть картинку несериализуемые данные 1с что это. Картинка про несериализуемые данные 1с что это. Фото несериализуемые данные 1с что это

Добрый день, не уверен, но возможно, что это связанно с тем, что в конфигурации (куда загружаются данные) у справочника «ОперандыПоказателей» нет реквизита «СпособыВычисленияПараметровОперандов».
Я бы добавил этот реквизит справочнику (перенес из выгружаемой конфигурации)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *