1C Serialization Library
Библиотека сериализации 1С (обработка)
Набор процедур и функций для сериализации/десериализации данных 1С и объектов СКД в простые структуры данных (Структура, соответствие, массив).
Варианты использования:
- замена платформенных функций сериализации, например, при сохранении версий объектов
- передача данных по протоколу HTTP
- основа для простых обработок обмена данными
- основа для получения отчетов из внешних ИБ 1С
Особенности:
- разработка ведется в формате EDT
- процедуры/функции поддерживают ограничение состава полей
- табличные части преобразуются в служебный элемент структуры с ключом "__ТЧ"
- при десериализации приоритетными являются метаданные, т.е. не возникает ошибок при изменении структуры данных конфигурации
- поддерживается возможность назначения процедур дополнения ссылочных данных при выгрузке
- поддерживается возможность переопределения функций поиска ссылочных данных
Особенности преобразования объектов СКД:
- ПутьКДанным пользовательских полей СКД формируется системой автоматически, поэтому:
- после загрузки СКД значение может отличаться на номер поля
- если в исходной СКД значение было на языке, отличном от языка целевой, то новое значение будет на языке целевой СКД
- Поле "Обязательное" роли поля набора данных сейчас устанавливается принудительно, хотя в документации отмечено как "Только чтение" (EDT тоже ругается)
- Поле "Схема" вложенной схемы компоновки данных при добавлении имеет тип неопределено и принудительно устанавливается значение "Новый СхемаКомпоновкиДанных()", хотя в документации отмечено как "Только чтение" (EDT тоже ругается)
- В исходных настройках СКД в полях ТипЗначения составного типа могут встречаться дубли типов <БизнесПроцесс....> при загрузке дубли схлопываются
- В исходных настройках СКД иногда встречается некорректный тип элементов свойства "ПараметрыДанных" объекта "НастройкиКомпоновкиДанных", вместо "ЗначениеПараметраНастроекКомпоновкиДанных" используется "ЗначениеПараметраКомпоновкиДанных". После выгрузки загрузки СКД, все элементы поля "ПараметрыДанных" будут приведены к типу "ЗначениеПараметраНастроекКомпоновкиДанных".
- Если в исходных настройках поле типа "Дата" имеет значение Неопределено, то при загрузке будет установлена пустая дата
- Если в исходных настройках поле типа "Строка" имеет значение Неопределено, то при загрузке будет установлена пустая строка
- Не заполняется поле "Идентификатор" в элементах структуры настроек (Группировки, Таблицы, Диаграммы), т.к. имеет признак "Только чтение", а автоматического присвоения значения не происходит. Влияние на работоспособность СКД пока не проверялось.
Методы преобразования прикладных объектов 1С
Общие методы
- ОбъектВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ЗаполнитьОбъектИзСтруктуры(Объект, СтруктураОбъекта, СписокСвойств, ИсключаяСвойства)
- СоздатьОбъектИзСтруктуры(СтруктураОбъекта, УстановитьСсылку, СписокСвойств, ИсключаяСвойства)
- СсылкаВСтруктуру(Значение)
- СсылкаИзСтруктуры(СтруктураЗначения)
- НаборЗаписейРегистраВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
- ЗаполнитьНаборЗаписейРегистраИзСтруктуры(НаборЗаписей, СтруктураНабораЗаписей, СписокСвойств, ИсключаяСвойства)
- СоздатьНаборЗаписейРегистраИзСтруктуры(СтруктураНабораЗаписей, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ДвиженияДокументаВСтруктуру(Объект, СписокРегистров, ИсключаяРегистры)
- ДвиженияДокументаИзСтруктуры(Объект, СтруктураДвижений, СписокРегистров, ИсключаяРегистры)
- ЗначениеВСтруктуру(Значение)
- ЗначениеИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки)
Прикладные объекты (ссылочные)
При преобразовании ссылочных объектов могут быть использованы фильтры свойств. Используется единый набор параметров:
- Объект - преобразуемый/восстанавливаемый объект
- СтруктураОбъекта - результат преобразования / источник для восстановления
- СписокСвойств - список свойств, которые попадут в результат преобразования
- ИсключаяСвойства - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)
- СправочникВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- СправочникИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ПланСчетовВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ПланСчетовИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ПланВидовХарактеристикВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ПланВидовХарактеристикИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ПланВидовРасчетаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ПланВидовРасчетаИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ДокументВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ДокументИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- БизнесПроцессВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- БизнесПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- ЗадачаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
- ЗадачаПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
Дополнение ссылочных данных при выгрузке
При выгрузке ссылочных данных возможно переопределение процедуры, дополняющей содержимое описания ссылки, для этого необходимо в модуле, выполняющем выгрузку, создать процедуру вида:
&НаСервере
Процедура МояПроцедураДополнения(ОписаниеЗначения, Значение) Экспорт
// Код дополнения
// ОписаниеЗначения.Вставить("КодЭлемента", Значение.Код);
КонецПроцедуры
где:
- ОписаниеЗначения - Структура - Структура содержащая поля описания ссылки
- Значение - ЛюбаяСсылка - ссылка, для которой получено описание
И перед выполнением выгрузки данных добавить обработчик дополнения ссылок
Библиотека.ДобавитьПравилоВыгрузкиТипа("Справочник.МойСправочник", "МояПроцедураДополнения", ЭтотОбъект)
где:
- Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)
Переопределение поиска ссылочных данных при загрузке
При загрузке ссылочных данных возможно переопределение функции поиска ссылок, для этого необходимо в модуле, выполняющем загрузку, создать функцию вида:
&НаСервере
Функция МояФункцияПоискаСсылок(ОписаниеВида, МетаОбъект, ОписаниеЗначения) Экспорт
// Код поиска ссылки
// НайденнаяСсылка = Справочники.МойЗагружаемыйСправочник.НайтиПоКоду(ОписаниеЗначения.КодЭлемента);
// Возврат НайденнаяСсылка;
КонецФункции
где доступны параметры:
- ОписаниеВида - Структура - Структура содержащая описание вида загружаемой ссылки
- МетаОбъект - ОписаниеМетаданных - Описание метаданных загружаемой ссылки
- ОписаниеЗначения - Структура - Структура содержащая поля описания искомой ссылки
И перед выполнением выгрузки данных добавить обработчик дополнения ссылок
Библиотека.ДобавитьПравилоЗагрузкиТипа("Справочник.МойСправочник", "Справочник.МойЗагружаемыйСправочник", "МояФункцияПоискаСсылок", ЭтотОбъект)
где:
- Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)
Прикладные объекты (регистры)
При преобразовании регистров могут быть использованы фильтры свойств. Используется единый набор параметров:
- НаборЗаписей - преобразуемый/восстанавливаемый набор записей регистра
- СтруктураОбъекта - результат преобразования / источник для восстановления
- СписокСвойств - список свойств, которые попадут в результат преобразования
- ИсключаяСвойства - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)
- НаборЗаписейРегистраСведенийВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраСведенийИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраНакопленияВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраНакопленияИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраБухгалтерииВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраБухгалтерииИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраРасчетаВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
- НаборЗаписейРегистраРасчетаИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)
Коллекции
При преобразовании коллекций выполняется рекурсивное преобразование всех вложенных значений с использованием функций ЗначениеВСтруктуру()/ЗначениеИзСтруктуры().
- СтруктураВСтруктуру(Значение)
- СтруктураИзСтруктуры(СтруктураЗначения)
- МассивВСтруктуру(Значение)
- МассивИзСтруктуры(СтруктураЗначения)
- СоответствиеВСтруктуру(Значение)
- СоответствиеИзСтруктуры(СтруктураЗначения)
- СписокЗначенийВСтруктуру(Значение)
- СписокЗначенийИзСтруктуры(СтруктураЗначения)
- ТаблицаЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)
- ТаблицаЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)
- ДеревоЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)
- ДеревоЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)
Методы преобразования данных формы
- ДанныеФормыВСтруктуру(Форма, ТолькоСохраняемые, СписокСвойств, ИсключаяСвойства)
- ДанныеФормыИзСтруктуры(Форма, СтруктураДанных, ПроверятьИмяФормы, СоздаватьРеквизиты, СписокСвойств, ИсключаяСвойства)
Методы преобразования объектов СКД
- СКДВСтруктуру(Объект)
- СКДИзСтруктуры(Объект, СтруктураОбъекта)
- НастройкиСКДВСтруктуру(Объект)
- НастройкиСКДИзСтруктуры(Объект, СтруктураОбъекта)
Методы чтения/записи JSON
При чтении записи JSON выполняется преобразование типов не совместимых с JSON в/из строки. Для преобразования "неизвестных" типов используется ЗначениеВСтрокуВнутр(). Значения типа "Дата" записываются/читаются в формате Microsoft.
- ЗаписатьОписаниеОбъектаВJSON(ОписаниеОбъекта)
- ПрочитатьОписаниеОбъектаИзJSON(ТекстОписанияОбъекта, СвойстваСоЗначениемДата)